zoukankan      html  css  js  c++  java
  • UVa 10054 The Necklace BFS+建模欧拉回路

    算法指南

    主要就是建立欧拉回路

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <queue>
     7 #include <set>
     8 #include <map>
     9 #include <string>
    10 #include <math.h>
    11 #include <stdlib.h>
    12 #include <time.h>
    13 #include <memory.h>
    14 using namespace std;
    15 const int maxn=50;
    16 int G[maxn+10][maxn+50];
    17 int deg[maxn+50];
    18 struct edge {
    19     int u,v;
    20     edge(int u,int v):u(u),v(v) {}
    21 };
    22 vector<edge>ans;
    23 void slove(int u) {
    24     for(int v=1; v<=maxn; v++) {
    25         if(G[u][v]) {
    26             G[u][v]--;
    27             G[v][u]--;
    28             slove(v);
    29             ans.push_back(edge(u,v));
    30         }
    31     }
    32 }
    33 
    34 int main() {
    35     int t,cas=0,n;
    36     scanf("%d",&t);
    37     int N=t;
    38     while(t--) {
    39         memset(G,0,sizeof(G));
    40         memset(deg,0,sizeof(deg));
    41         cas++;
    42         scanf("%d",&n);
    43         int start;
    44         for(int i=0; i<n; i++) {
    45             int u,v;
    46             scanf("%d%d",&u,&v);
    47             G[u][v]++;
    48             G[v][u]++;
    49             deg[u]++;
    50             deg[v]++;
    51             start=u;
    52         }
    53         int flag=true;
    54         for(int i=1; i<=maxn; i++) {
    55             if(deg[i]%2) {
    56                 flag=false;
    57                 break;
    58             }
    59         }
    60         if(flag) {
    61             ans.clear();
    62             slove(start);
    63             if(ans.size()!=n||ans[0].v!=ans[ans.size()-1].u) flag=false;
    64         }
    65         printf("Case #%d
    ", cas);
    66         if(flag==false) {
    67             printf("some beads may be lost
    ");
    68         } else {
    69             for(int i=ans.size()-1; i>=0; i--) {
    70                 printf("%d %d
    ",ans[i].u,ans[i].v);
    71             }
    72         }
    73         if(cas!=N)
    74             printf("
    ");
    75     }
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    C语言写数据库(三)
    C语言写数据库(一)
    KMP 串的模式匹配 (25 分)
    11-散列4 Hashing
    11-散列3 QQ帐户的申请与登陆 (25 分)
    11-散列1 电话聊天狂人 (25 分)
    11-散列2 Hashing (25 分)
    am335x system upgrade uboot nand boot(三)
    am335x system upgrade uboot ethernet(二)
    am335x system upgrade uboot sd boot(一)
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5313433.html
Copyright © 2011-2022 走看看