所以我認爲我在正確的軌道上使用分支和綁定方法來解決我的啓發式問題 解決方案,但是,我在我的「最少」函數中出現了分段錯誤,但是我仍然很難將這個算法考慮在內。任何幫助解決這個問題將不勝感激。基本上對功能的要求(因爲我的主要功能看起來很有趣)是程序最多需要150個城市,如果讀取時間不到60秒,我會得到獎勵積分(這意味着我沒有失敗),輸入文件將顯示(例如): c 1 c 2 a 1 2 300 其中'c'表示「創建城市」,'a'表示「添加邊界」。這就是爲什麼我的程序是按照它的方式設置的。分支和綁定問題的C代碼
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cost=0;
int main(){
int numcity ,a[151][151],visited[151],worthless,city1,city2,distance;
char citystring[2];
a[1][1]=0;
while(scanf("%s",citystring) != EOF){
if(strcmp(citystring, "c") == 0){
scanf("%d", &worthless);
numcity++;
}
else if(strcmp(citystring, "a") == 0){
scanf("%d %d %d",&city1,&city2,&distance);
a[city1][city2] = distance;
a[city2][city1] = distance;
}
}
mincost(1,numcity,a,visited);
printf("The minimum cost tour is %d",cost);
return 0;
}
int mincost(int city,int n,int a[151][151],int visited[151]){
int i,ncity;
visited[city]=1;
printf("%d->",city);
ncity=least(city,n,a,visited);
if(ncity==999999){
ncity=1;
printf("%d",ncity);
cost+=a[city][ncity];
}
mincost(ncity,n,a,visited);
}
int least(int c,int n,int a[151][151],int visited[10]){
int i,nc=999999,min=999999,kmin;
for(i=1;i<=n;i++){
if((a[c][i]!=0)&&(visited[i]==0)){
if(a[c][i]<min){
min=a[i][1]+a[c][i];
kmin=a[c][i];
nc=i;
}
}
}
if(min!=999999)
cost+=kmin;
return nc;
}
你的代碼肯定有幾個問題。第一次mincost遞歸沒有任何出路(這就是爲什麼你現在崩潰)。第二,正如吉姆所說,至少你的for循環()從1開始。可能有其他的,但是一次只處理一個,並且根據需要添加儘可能多的printf跟蹤。你會得到它。 – 2013-04-05 23:46:05