找到2点之间的最小道路

时间:2014-11-14 16:49:23

标签: c distance minimum

我有一个文件,在第一行包含一个数字N,然后在即将到来的行中包含一个NxN矩阵。 我要做的是找到两个给定点之间的最小距离。这可能是一个图表,我必须找到2个节点之间的距离。输入文件有它的内容:

4
0 3 4 0
3 0 0 2
4 0 0 3
0 2 3 0

我的代码是:

#include <stdio.h>
FILE *file_in;
int n,first,last,a[50][50], st[50];
void read_matrix(int n)
{
    int i,j;
    for(i=0; i<n; i++)
    {
            for(j=0; j<n; j++)
            {
                    fscanf(file_in,"%d",&a[i][j]);  
            }
        }
}

void print_sol(int k)
{
    int i;
    printf("Solution is: ");
    for(i=0; i<=k; i++)
        printf("%d ", st[i]);
    printf("\n");
}

int validation(k)
{
    int i;
    for(i=0; i<k; i++)
    {
        if(st[i]==st[k])
            return 0;   
    }

    if(!a[st[k-1]][st[k]])
        return 0;
    return 1;
}

int solution(k)
{
    if(st[k]==last)
        return 1;
    else return 0;
}

void backtracking(int k)
{
    int i;
    if(k==n+1)
        return;
    else 
    {
        for(i=0; i<n; i++)
        {
            st[k]=i;
            if(validation(k))
            {
                if(solution(k))
                    print_sol(k);
                else backtracking(k+1);
            }
        }



    }
}
int main()
{   
    file_in=fopen("fis.txt", "r");
    fscanf(file_in,"%d", &n);
    read_matrix(n);
    scanf("%d%d", &first, &last);
    st[0]=first;
    backtracking(1);

    return 13;
}

运行后我得到:

Solution is: 1 0 2 
Solution is: 1 3 2 

此代码将打印所有解决方案,但我需要的是只打印一个,第一个和最后一个点之间的距离最小的那个,我不知道如何做到这一点。

我想要打印的是:

Solution is: 1 0 2 

谢谢!

0 个答案:

没有答案