HDU 1181 變形課
變形課Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 11220 Accepted Submission(s): 4156
Problem Description
呃......變形課上Harry碰到了一點小麻煩,因為他並不像Hermione那樣能夠記住所有的咒語而隨意的將一個棒球變成刺蝟什麼的,但是他發現了變形咒語的一個統一規律:如果咒語是以a開頭b結尾的一個單詞,那麼它的作用就恰好是使A物體變成B物體.
Harry已經將他所會的所有咒語都列成了一個表,他想讓你幫忙計算一下他是否能完成老師的作業,將一個B(ball)變成一個M(Mouse),你知道,如果他自己不能完成的話,他就隻好向Hermione請教,並且被迫聽一大堆好好學習的道理.
Input
測試數據有多組。每組有多行,每行一個單詞,僅包括小寫字母,是Harry所會的所有咒語.數字0表示一組輸入結束.
Output
如果Harry可以完成他的作業,就輸出"Yes.",否則就輸出"No."(不要忽略了句號)
Sample Input
so
soon
river
goes
them
got
moon
begin
big
0
Sample Output
Yes.
注:Harry 可以念這個咒語:"big-got-them".
#include<stdio.h>
#include<string.h>
struct node
{
int value;
int flag;
};
int prove;
node a[26][26];
void DFS(node a[][26], int frist)
{
int i;
if(prove==1)
return ;
if(frist==12)
{
printf("Yes.\n");
prove = 1;
return ;
}
for(i=0;i<26;i++)
if(i==frist)
continue;
else
{
if(a[frist][i].value==1&&a[frist][i].flag==0)
{
a[frist][i].flag = 1;
DFS(a,i);
a[frist][i].flag = 0;
}
}
return ;
}
int main()
{
char str[100];
int n,st,en;
memset(a,0,sizeof(a));
prove = 0;
while(gets(str))
{
if(str[0] == '\0')
break;
if(str[0] == '0')
{
DFS(a, 1);
if(prove == 0)
printf("No.\n");
memset(a, 0, sizeof(a));
prove = 0;
}
else
{
n = strlen(str);
st = str[0] - 'a';
en = str[n -1] - 'a';
a[st][en].value = 1;
}
}
return 0;
}
最後更新:2017-04-03 12:55:00