杭电oj 1181 变形课
用的是求最短路径的floyd算法,较简单的改变一下。
用的是求最短路径的floyd算法,较简单的改变一下。
关于floyd算法介绍,中文维基http://zh.wikipedia.org/wiki/%E5%BC%97%E6%B4%9B%E4%BC%8A%E5%BE%B7%E7%AE%97%E6%B3%95
#include<cstdio>
#include<string>
using namespace std;
int arr[26][26];
void Floyd()
{
for(int i = 0; i < 26; ++i)
{
for(int j = 0; j < 26; ++j)
{
for(int k = 0; k < 26; ++k)
{
if(arr[i][j] && arr[j][k])
{
arr[i][k] = 1;
}
}
}
}
}
int main()
{
int len, begin, end;
char line[1000];
//freopen("in.txt", "r", stdin);
while(gets(line))
{
memset(arr, 0, sizeof(arr));
while(line[0] != '0')
{
len = strlen(line);
begin = line[0] - 'a';
end = line[len-1] - 'a';
arr[begin][end] = 1;
gets(line);
}
Floyd();
if(arr[1][12])
{
printf("Yes.\n");
}
else
{
printf("No.\n");
}
}
}
找到了一位用搜索解决该题的