Code: Select all
#include <stdio.h>
int edge[5000][2];
int node[101];
int nodes;
int edges, length;
int main()
{
int start, i, j, ncase, cont;
for(scanf("%d",&nodes),ncase=1; nodes>0; scanf("%d",&nodes),ncase++) {
scanf("%d",&start);
edges=-1;
do {
edges++;
scanf("%d %d",&edge[edges][0],&edge[edges][1]);
} while (edge[edges][0] != 0 && edge[edges][1] != 0);
for(i=1; i<=nodes; i++) node[i]=-1;
node[start]=0;
length=-1;
do {
cont=0;
length++;
for (i=1; i<=nodes; i++)
if (node[i]==length)
for (j=0;j<edges;j++)
if (edge[j][0]==i) {
node[edge[j][1]]=length+1;
cont=1;
}
} while (cont);
for (i=1;node[i]<length;i++);
printf("Case %d: The longest path from %d has length %d, finishing at %d.nn",ncase,start,length,i);
}
return 0;
}