She turns to you to write a program to help her.
Input
There will be multiple test cases for this problem. Each test case will have input on multiple lines. The first line will contain the integer n (< 10) noting the number of places Granny wants to visit that day. These will be numbered 1 through n and Granny's house will be numbered 0. The next n lines will be a list of those places near each spot. The first line will be a list of places with a direct route from place 1. The second line will be a list of places with a direct route from place 2, and so on. You may assume that if place i has a direct route to place j, then there is a direct route the other direction also. A line containing 0 will follow the last test case.
Output
For each test case, print one line of the form:
Case m: Granny can make the circuit.
or
Case m: Granny can not make the circuit.
as appropriate. Here, m is the number of the test case, starting at 1.
Sample Input
5 0 2 5 0 1 3 2 4 0 3 5 1 4 4 0 2 3 4 1 3 1 2 0 1 0
Sample Output
Case 1: Granny can make the circuit. Case 2: Granny can not make the circuit.
解析:题意是Granny绕城市 骑自行车,要求是除了她自己的城市外,其他的城市都要到达但仅能到达一次。这就是图中回路问题。
开始看错了题意,以为下面的每行是代表相邻数之间是连通的,一直wa。后来经同学提醒,原来下面的n行代表的是第i行就是城市i
到后面城市是连通的。
#include"stdio.h"
#include"string.h"
#define max 11
int edges[max][max];
int visited[11];
int N,M,x,y,count,flag;
void DFSM(int edges[][max],int i)
{
int j;
if(count==N)
{
if(edges[i][0]==1)
{
flag=1;
return;
}
}
for(j=1;j<=N;j++)
if(edges[i][j]==1&&!visited[j])
{
visited[j]=1;
count++;
DFSM(edges,j);
visited[j]=0; // 回溯
count--;
}
}
int main()
{
char a[1000];
int k,i,ss=0,x;
while(scanf("%d",&N)!=EOF&&N)
{
ss++;
count=0;
x=0;
getchar();
k=0;
flag=0;
M=N;
visited[0]=1;
memset(edges,0,sizeof(edges));
memset(visited,0,sizeof(visited));
while(M--)
{
x++;
gets(a);
int len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
y=a[i]-'0';
edges[x][y]=1;
edges[y][x]=1;
}
}
}
DFSM(edges,0);
if(flag==1)
printf("Case %d: Granny can make the circuit.\n",ss);
else
printf("Case %d: Granny can not make the circuit.\n",ss);
}
return 0;
}