| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
找着别人AC的代码对比了一下 没发现思想有错 可就是WA 大虾帮忙啊。。。。#include<iostream>
using namespace std;
int degree[26],N,n;
string s;
bool adj[26][26],visited[26];
void Input()
{
int i,j,t1,t2;
char ch,cht;
for(i=0;i<26;i++)
{
visited[i]=false;
degree[i]=0;
for(j=0;j<26;j++)
adj[i][j]=false;
}
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
ch=getchar();
t1=ch-'a';
while(1)
{
cht=getchar();
if(cht>='a'&&cht<='z')ch=cht;
else if(cht=='\n')break;
}
t2=ch-'a';
adj[t1][t2]=true;
visited[t1]=true;
visited[t2]=true;
++degree[t1];//入度
--degree[t2];//出度
}
}
bool Deal()//根据欧拉回路的定义算出入度
{
int i,f1,f2;
f1=f2=0;
for(i=0;i<26;i++)
if(degree[i]==1)f1++;
else if(degree[i]==-1)f2++;
else if(degree[i]!=0){return false;}
if((f1==1&&f2==1)||(f1==0&&f2==0))return true;
else return false;
}
void DFS(const int &v)
{
int i;
visited[v]=false;
for(i=0;i<26;i++)
if(adj[v][i]==true&&visited[i]==true)DFS(i);
}
int main()
{
int i;
cin>>N;
while(N--)
{
Input();
if(!Deal())cout<<"The door cannot be opened."<<endl;
else {
for(i=0;i<26;i++)
if(visited[i]==true)break;
DFS(i);//访问到的都变成了false
for(i=0;i<26;i++)//再有true的点说明没有连通
if(visited[i]==true)break;
if(i==26)cout<<"Ordering is possible."<<endl;
else cout<<"The door cannot be opened."<<endl;
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator