如何建立所有可能的轨道

时间:2016-11-29 23:23:32

标签: c backtracking recursive-backtracking

在名为" data.in"的给定文件中;写下城市数量N,两个城市A和B以及它们之间的现有道路.Ex,the set" 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;
}

0 个答案:

没有答案