没有什么新意了,也没有坑点。
#include <iostream> #include <queue> #include <stdio.h> using namespace std; #define inf 0x7fffffff struct node { int to, w, next; } edge[1005]; int dis[205], head[205], cnt, c[205], n, m; bool vis[205]; void init() { cnt = 0; for (int i = 0; i < 205; i++) { head[i] = -1; dis[i] = 0; } } void add(int u, int v, int w) { edge[cnt].to = v; edge[cnt].w = w; edge[cnt].next = head[u]; head[u] = cnt++; } bool spfa() { queue <int> q; int i; for (i = 0; i <= n; i++) { q.push(i); vis[i] = true; c[i] = 1; } while (!q.empty()) { int p, t = q.front(); q.pop(); p = head[t]; vis[t] = false; while (p != -1) { if (dis[edge[p].to] > dis[t] + edge[p].w) { dis[edge[p].to] = dis[t] + edge[p].w; if (!vis[edge[p].to]) { vis[edge[p].to] = true; q.push(edge[p].to); c[edge[p].to]++; if (c[edge[p].to] > 24) { return false; } } } p = edge[p].next; } } return true; } int main() { while (scanf("%d", &n), n) { scanf("%d", &m); init(); for (int i = 0; i < m; i++) { int s, e, w; char c[5]; cin>>s>>e>>c>>w; if (c[0] == ‘g‘) { add(s + e, s - 1, -w - 1); } else { add(s - 1, s + e, w - 1); } } if (!spfa()) { puts("successful conspiracy"); } else { puts("lamentable kingdom"); } } return 0; }
原文:http://blog.csdn.net/zhengnanlee/article/details/19967159