歐拉回路的判定 poj 1300

這個題卡了一上午卡到心態爆炸,卡到欲仙欲死。各種bug蜜汁出現。一邊一遍的調試,忽然發現思考成熟是多麼的重要!最後是一個短路效應的問題,懷疑人生!

這個題就是統計出度和入度,就是建圖有點麻煩,其實也不算太麻煩了。對於無向圖而言就是
判斷是否滿足沒有奇度頂點,或者奇度定點只有兩個,並且這兩個奇度頂點其中一個是0,另一個是起點。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int MAXN  = 1000;
char k[MAXN];
int ans[30];
int sum;
void f(int cnt)
{
    char s[1000];
    char temp;
    int t = 0;
    while(temp = getchar())
    {
        if(temp == '\n')
            break;
        if(temp == 'E')
        {
            for(int r = 0; r <= 1;++r)
                getchar();
            break;
        }
        s[t++] = temp;
        if(temp != ' ')
        {
            ans[cnt]++;
            ans[temp - 48]++;
            sum++;
        }
    }
    return ;
}
int main()
{
   string s;
    while(cin >> s && s != "ENDOFINPUT")
    {
        int m,n;
        sum = 0;
        memset(k,0,sizeof(k));
        memset(ans,0,sizeof(ans));
        cin >> m >> n;
        getchar();
        for(int i = 0;i <= n; ++i)
        {
            f(i);
        }
        int t = 0;
        int flag = 1;
        int temp[5000];
        for(int i = 0;i <= n - 1; ++i)
        {
            if(ans[i] % 2)
            {
                temp[t++] = i;
            }
        }
        if(t == 0 && m == 0)
        {
            cout << "YES" << ' ' << sum << endl;
        }
        else
        {
            if(t == 2 && (temp[0] == m &&  temp[1] == 0) || (temp[0] == 0 && temp[1] == m))
            {
                cout << "YES" << ' ' << sum << endl;
            }
            else
            {
                cout << "NO" << endl;
            }
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章