旅行销售员的错误代码,即以最小的图表成本找到周期

error code for travelling salesperson i.e finding cycle with minimum cost of a graph

    #include <stdio.h>
    int a[10][10],visited[10],n,cost=0;
    void mincost(int city)
    {
        int i,ncity;   //ncity==nearest city
        visited[city]=1;
        printf("%d->",city+1);
        ncity=least(city);
        if(ncity==999)  //no nearest city,hence back to 1
        {
            ncity=0;
            printf("%d",ncity+1);
            cost+=a[city][ncity];
            return;
        }
        mincost(ncity);   //recursive
    }
    int least(int c)
    {
        int i,nc=999;
        int min=999,kmin;
        for(i=0;i<n;i++)
        {
            if((a[c][i]!=0) && visited[i]==0)
            {
                if(a[c][i]<min)
                {
                    min=a[i][0]+a[c][i];
                    kmin=a[c][i];
                    nc=i;
                }
            }
        }
        if(min!=999)
            cost+=kmin;
        return nc;
    }
    int main()
    {
        int n,i,j;
        printf("Enter the number of cities:");
        scanf("%d",&n);
        printf("\nEnter the cost matrix:");
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i=0;i<n;i++)
            visited[i]=0;
        printf("\nThe minimum path is:\n");
        mincost(0);
        printf("\nMinimum cost:%d",cost);
        getch();
        return 0;
    }

程序为给定的图找到成本最低的循环。 函数 least 找到下一个最近的城市,由 nc 表示,每个城市通过递归调用 mincost 函数被逐一考虑。 输出总是第一个城市&它的成本,仅此而已。 请帮忙!

您有一个全局变量 n,它被编译器初始化为零。然后在 main 函数中你有一个 local 变量 n 隐藏全局变量,所以当你从用户读取输入并初始化 n为此,只有局部变量被初始化,全局变量仍然为零。

一般提示:避免使用全局变量。如果您需要其他函数了解某个值或变量,请将其作为参数传递。