在给定的名为“data.in”的文件中写入了城市 N、两个城市 A 和 B 的数量以及它们之间的现有道路。例如,集合“2 6”表示城市 2 和城市 6 之间存在一条道路.我必须在一个名为“data.out”的文件中显示从城市 A 到达城市 B 的所有可能性,而无需多次经过一个城市。我已经编写了以下代码,但它没有打印任何内容。
#include <stdio.h>
#include <stdlib.h>
FILE*in;
FILE*out;
int a[101][101],s[100];
int N,A,B;
void read(int *N,int *A,int *B)
{
int x,y;
fscanf(in,"%d%d%d",N,A,B);
do
{
fscanf(in,"%d%d",&x,&y);
if(!feof(in))
a[x][y]=a[y][x]=1;
}
while(!feof(in));
}
void print(int k)
{
int i;
for(i=0; i<=k; i++)
fprintf(out,"%d ",s[i]);
fprintf(out,"\n");
}
void BKT(int k)
{
int i;
for(i=1; i<=N; i++)
{
s[k]=i;
if (pass(k))
if(s[k]==B) print(k);
else BKT(k+1);
}
}
int pass(int k)
{
int i;
for(i=0; i<k; i++)
if(s[k]==s[i]) return 0;
if(!a[s[k]][s[k-1]]) return 0;
return 1;
}
int main()
{
int N,A,B;
in=fopen("data.in","r");
out=fopen("data.out","w");
read(&N,&A,&B);
s[0]=A;
BKT(1);
return 0;
}