Ошибка В Программе. Выводит Не Все Пути.

  • Автор темы saymon
  • Дата начала
S

saymon

#1
входные данные:
5 /размерность
1 0 1 1 0
0 1 1 1 1
1 1 1 0 1
1 1 0 1 1
0 1 1 1 1
2 /начальная вершина
4 /конечная вершина

выходные данные должны быть такими:
24
214
2134
2034
20314

C++:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int a[20][20];
int n;
int sp,ep;
int *was,*pom,*path,cpath;

FILE *f1;
int graf (int p,int q,int nom)
{
int res=0;
was[p]=1;
if (q==p) return 1;
for (int i=0;i<n;i++)
if (i!=p &&(a[p][i]||a[i][p]) && !was[i] && !pom[i])
{
res=graf(i,q,nom+1);
if (res)
{
if (i!=sp && i!=q) pom[i]=1;
path[nom]=p;
cpath++;
break;
}
}
return res;
};

int main(int argc, char *argv[])
{
if (argc!=3) {exit (1);}

int i,j,c;
cpath=0;

f1=fopen (argv[1],"r");

fscanf (f1,"%d",&n);

was=new int[n];
pom=new int[n];
path=new int[n];

for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
fscanf(f1,"%d",&a[i][j]);
}
fscanf (f1,"%d",&sp);
fscanf (f1,"%d",&ep);

for (i=0;i<n;i++)
{
was[i]=0;
pom[i]=0;
}

FILE *f2=fopen(argv[2],"w");

if(a[sp][ep] || a[ep][sp])
{
c=1;
a[ep][sp]=0;
a[sp][ep]=0;
fprintf(f2,"%d%d\n",sp,ep);
}

while (graf(sp,ep,0))
{
for (i=0;i<n;i++) was[i]=0;
for (j=0;j<cpath;j++)
{
fprintf (f2,"%d",path[j]);
}
fprintf(f2,"%d\n",ep,cpath);
cpath=0;
}
if (c==1) {c=0;a[ep][sp]=1;a[sp][ep]=1;}

fclose (f2);
printf ("\n File: out.txt");
return 0;
}