208 - Firetruck
来源:互联网 发布:冠新软件 中标 编辑:程序博客网 时间:2024/05/01 15:07
#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;}