我有一个文件,在第一行包含一个数字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
谢谢!