#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <algorithm>
#include <sstream>
#include <utility>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cctype>
#define CLEAR(a, b) memset(a, b, sizeof(a))
#define IN() freopen("in.txt", "r", stdin)
#define OUT() freopen("out.txt", "w", stdout)
#define LL long long
#define mod 1000000007
#define INF 1000000007
#define eps 1e-5
#define PI 3.1415926535898
using namespace std;
//-------------------------CHC------------------------------//
const int maxn = 25;
int n;
vector<int> to[maxn];
bool vis[maxn];
int cnt;
int ans[maxn];
bool check(int u) {
if (u == n) return true;
vis[u] = true;
for (int i = 0; i < to[u].size(); ++i)
if (!vis[to[u][i]] && check(to[u][i])) return true;
return false;
}
void dfs(int u, int cur) {
if (u == n) {
++cnt;
for (int i = 0; i < cur; ++i)
printf("%d ", ans[i]);
printf("%d\n", n);
return;
}
ans[cur] = u;
for (int i = 0; i < to[u].size(); ++i) {
int v = to[u][i];
if (!vis[v]) {
vis[v] = true;
dfs(v, cur+1);
vis[v] = false;
}
}
}
int main() {
int kase = 1;
while (~scanf("%d", &n)) {
for (int i = 1; i < maxn; ++i) to[i].clear();
CLEAR(vis, 0);
int u, v;
while (scanf("%d%d", &u, &v) && (u || v)) {
to[u].push_back(v);
to[v].push_back(u);
}
for (int i = 1; i <= n; ++i) sort(to[i].begin(), to[i].end());
printf("CASE %d:\n", kase++);
cnt = 0;
if (check(1)) {
CLEAR(vis, 0);
vis[1] = true;
dfs(1, 0);
}
printf("There are %d routes from the firestation to streetcorner %d.\n", cnt, n);
}
return 0;
}
习题7-1 消防车(Firetruck, ACM/ICPC World Finals 1991, UVa208)
最新推荐文章于 2019-09-10 21:33:49 发布