题目:http://acm.hdu.edu.cn/showproblem.php?pid=1181
题意:balabala一大堆,就是问你,你能不能找到几个连起来的字符,开头是B结尾是M;
思路:看很多人用dfs,我用bfs写了下,感觉还可以,虽然题目很水,但是发现了一些问题。
坑点:1.要输入多组数据
2。尽量用scanf printf
3.bfs里的visit尽量不要省略,否则容易超时。
代码:
#include <iostream>
#include <cstdio>
#include <queue>
#include <string>
using namespace std;
struct node
{
int x;
int y;
int visit;
}point[1000];
int i;
void bfs()
{
queue<node>q;
node start;
node temp;
start.x=0;
start.y=1;
q.push(start);
while(!q.empty()){
temp=q.front();q.pop();
for(int j=0;j<i;j++){
if(point[j].x==temp.y&&point[j].y==12){
printf("Yes.\n");
return ;
}
if(point[j].x==temp.y&&point[j].visit==0){
q.push(point[j]);
point[j].visit=1;
}
}
}
printf("No.\n");
return ;
}
int main()
{
string s;
i=0;
while(cin>>s){
if(s[0]=='0'){
bfs();
i=0;
continue;
}
point[i].x=s[0]-'a'; point[i].visit=0;
point[i++].y=s[s.size()-1]-'a';
}
}