#include <cstdio>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
int sum, g[30][30], d[30], en, way[30], l_w;
int maxd, flag[30], l_f;
int cmp(const void *a, const void *b)
{return *(int*)a-*(int*)b;}
void firstdfs(int cur)
{
d[cur] = 1;
flag[l_f++] = cur;
for(int i = 1; i <= maxd; i++)
if(g[cur][i] && !d[i])firstdfs(i);
return;
}
void dfs(int cur)
{
if(cur == en)
{
sum++;
printf("1");
for(int i = 0; i < l_w; i++)
printf(" %d", way[i]);
printf("\n");
return;
}
for(int i = 0; i < l_f; i++)
{
if(g[cur][flag[i]] && !d[flag[i]])
{
d[flag[i]] = 1;
way[l_w++] = flag[i];
dfs(flag[i]);
l_w--;
d[flag[i]] = 0;
}
}
return;
}
int main()
{
int kase = 1;
while(scanf("%d", &en)!=EOF)
{
memset(g, 0, sizeof(g));
memset(d, 0, sizeof(d));
memset(way, 0, sizeof(way));
int a, b;
maxd = 0;
while(scanf("%d%d", &a, &b), a+b)
{
g[a][b] = g[b][a] = 1;
if(a > maxd) maxd = a;
if(b > maxd) maxd = b;
}
sum = l_w = l_f = 0;
firstdfs(en);
qsort(flag, l_f, sizeof(int), cmp);
memset(d, 0, sizeof(d));
printf("CASE %d:\n", kase++);
d[1] = 1;
dfs(1);
printf("There are %d routes from the firestation to streetcorner %d.\n", sum, en);
}
return 0;
}
208 - Firetruck
最新推荐文章于 2019-09-10 21:33:49 发布