无向图输出所有环。。【GYN给的题目和模型都错了。。。】

昨晚和今早帮GYN巧了一个小的算法

他的本意是把一个图的单环全部输出出来

结果建图的时候就出现问题了。。

应该是做一下修改就可以

但是我现在让他搞得目的都不知道干啥了。。

代码先放着

回去他跟我说了题意我在改

【这个要是写成了  也算是我项目上的第一个助攻了   哈哈】

  1 #include <iostream>
  2 #include <cstring>
  3 #include <cstdio>
  4 #include <cmath>
  5 #include <map>
  6 #include <algorithm>
  7 using namespace std;
  8 
  9 const int maxn = 105;
 10 int G[maxn][maxn];
 11 int s[maxn];
 12 int vis[maxn];
 13 int in[maxn];
 14 
 15 int n;
 16 int top;
 17 
 18 map<string, int> mp;
 19 bool check1(int a[maxn], int cnt) {
 20     int aa[maxn];
 21     for(int i = 0; i < cnt; i++) aa[i] = a[i];
 22     sort(aa, aa + cnt);
 23     string s1;
 24     for(int i = 0; i < cnt; i++) {
 25         s1 += aa[i] + '0';
 26     }
 27     if(mp[s1]) return false;
 28     else {
 29         mp[s1] = 1;
 30         return true;
 31     }
 32 }
 33 
 34 bool check2(int a[maxn], int cnt) {
 35     for(int i = 0; i < cnt; i++) {
 36         for(int j = 0; j < cnt; j++) {
 37             if(G[a[i]][a[j]]) {
 38                 if(i == 0 && j == cnt - 1) continue;
 39                 if(j - i >= 2) {
 40                     return false;
 41                 }
 42             }
 43         }
 44     }
 45     return true;
 46 }
 47 
 48 bool check3(int a[maxn], int cnt) {
 49 }
 50 
 51 void dfs(int x0, int x1) {
 52     vis[x1] = true;
 53     s[++top] = x1;
 54     in[x1] = true;
 55     for(int i = 1; i <= n; i++) {
 56         if(i == x0 || i == x1) continue;
 57         if(G[x1][i]) {
 58             if(in[i]) {
 59                 int j;
 60                 for(j = top; s[j] != i; j--);
 61                 int che[maxn];
 62                 int cnt = 0;
 63                 for(int k = j; k <= top; k++) {
 64                     che[cnt++] = s[k];
 65                 }
 66                 if(check1(che, cnt) && check2(che, cnt)) {
 67                     for(int k = 0; k < cnt; k++) {
 68                         printf(k == 0 ? "%d" : " %d", che[k]);
 69                     } puts("");
 70                 }
 71             } else {
 72                 dfs(x1, i);
 73             }
 74         }
 75     }
 76     top--;
 77     in[x1] = 0;
 78 }
 79     
 80 int main() {
 81     int num;
 82     while(EOF != scanf("%d",&n) ) {
 83         memset(G, 0, sizeof(G));
 84         memset(s, 0, sizeof(s));
 85         memset(in, 0, sizeof(in));
 86         int u;
 87         mp.clear();
 88         for(int i = 1; i <= n; i ++) {
 89             scanf("%d",&u);
 90             for(int j = 0; j < 4; j++) {
 91                 scanf("%d",&num);
 92                 if(num != 0) 
 93                     G[u][num] = G[num][u] = 1;
 94             }
 95         }
 96         top = 0;
 97         dfs(1, 1);
 98     }
 99     return 0;
100 }
View Code

 

posted @ 2014-11-11 20:55  悠悠我心。  阅读(397)  评论(0编辑  收藏  举报