UVA - 10129 Play on Words

来源:互联网 发布:数据分析毕业论文题目 编辑:程序博客网 时间:2024/06/15 04:27
Play on Words
Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu

Submit Status

Description

Download as PDF

dfs实现的欧拉回路,需要注意很多判断条件判断是不是回路
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int visit[30], s[30][30], in[30], out[30];
char str[10000];
void dfs(int k);


int main()
{
    int n, k1, k2;
    scanf("%d", &n);
    while(n--)
    {
        int m, num, f;
        scanf("%d", &m);
        memset(visit,0,sizeof(visit));
        memset(s,0,sizeof(s));
        memset(in,0,sizeof(in));
        memset(out,0,sizeof(out));
        while(m--)
        {
            scanf(" %s",str);
            int l=strlen(str);
            k1=str[0]-'a';
            k2=str[l-1]-'a';
            in[k1]++;
            out[k2]++;
            s[k1][k2]=1;
            num=k1;
            visit[k1]=1;
            visit[k2]=1;
        }
        for(int i=0;i<26;i++)
        {
            in[i]=in[i]-out[i];
        }
        k1=k2=f=0;
        for(int i=0;i<26;i++)
        {
            if(in[i]==-1)
            {
                k1++;
            }
            else if(in[i]==1)
            {
                k2++;
                num=i;
            }
            else if(in[i]!=0)
            {
                f=1;
            }
        }
        if(f==0)
        {
            if((k1==1&&k2==1)||(k1+k2==0))
            {
                dfs(num);
                for(int i=0; i<26; i++)
                {
                    f=f+visit[i];
                }
            }
            else
            {
                f=1;
            }
        }
        if(f!=0)
        {
            printf("The door cannot be opened.\n");
        }
        else
        {
            printf("Ordering is possible.\n");
        }
    }
    return 0;
}

void dfs(int k)
{
    visit[k]=0;
    for(int i=0;i<26;i++)
    {
        if(visit[i]==1&&s[k][i]==1)
        {
            s[k][i]=0;
            dfs(i);
        }
    }
    return ;
}
0 0
原创粉丝点击