| ||||||||||
| 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 | |||||||||
不知道为何会wa....首先用DFS判断是否连通,若连通,再逐个检查其顶点的入度和出度,以判断是否有一条有向欧拉路。
可是为什么会WA????
#include<stdio.h>
#include<string.h>
long adj[26][26],indeg[26],outdeg[26];
long visited[26];
long flag,flagin,flagout;
char mentioned[26];
long first,last;
long count;
long ment,i,j,v,t;
long n;
char input[1010];
int main()
{
long DFS(long);
scanf("%d",&v);
for(t=0;t<v;t++)
{
scanf("%d",&n);
for(i=0;i<26;i++) {visited[i]=0; indeg[i]=0; outdeg[i]=0; }
for(i=0;i<26;i++) for(j=0;j<26;j++) adj[i][j]=0;
ment=0;flagin=0;flagout=0;
count=0;
for(i=0;i<n;i++)
{
scanf("%s",input);
first=input[0]-97;last=input[strlen(input)-1]-97;
for(j=0;j<ment;j++)
if((long)mentioned[j]-97==first) break;
if(j==ment) mentioned[ment++]=first+97;
for(j=0;j<ment;j++)
if((long)mentioned[j]-97==last) break;
if(j==ment) mentioned[ment++]=last+97;
adj[first][last]=1;
outdeg[first]++;indeg[last]++;
}
DFS((long)mentioned[0]-97);
if(count!=ment)
{
printf("The door cannot be opened.\n"); continue;
}
flag=1;
for (i=0;i<26;i++)
{
if(indeg[i]==outdeg[i]) continue;
if(indeg[i]>outdeg[i]+1 || outdeg[i]>indeg[i]+1) {flag=0;break;}
if(indeg[i]==outdeg[i]+1) {flagin++; continue;}
if(indeg[i]==outdeg[i]-1) {flagout++;continue;}
}
if(flag==0 || flagin>1 || flagout>1 ||flagin!=flagout)
{
printf("The door cannot be opened.\n"); continue;
}
printf("Ordering is possible.\n");
}
return 0;
}
long DFS(long ch)
{
count++;
visited[ch]=1;
for(i=0;i<26;i++)
{
if(adj[ch][i]>=1 && visited[i]==0) DFS(i);
}
for(i=0;i<26;i++)
{
if(adj[i][ch]>=1 && visited[i]==0) DFS(i);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator