习题7-1 消防车(Firetruck, ACM/ICPC World Finals 1991, UVa208)

来源:互联网 发布:linux phpmyadmin 编辑:程序博客网 时间:2024/04/30 02:46
#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.1415926535898using 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;}

阅读全文
0 0
原创粉丝点击