首页 > 代码库 > HDU-1181-变形课
HDU-1181-变形课
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1181
水题一个,bfs ,dfs多可以。bfs时间更优一些,
bfs代码
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int success,k;
struct node
{
char x,y;
}c[100000];
int vis[100000];
queue<node> q;
void bfs()
{
node s,e;
while(q.size())
q.pop();
s.y=‘b‘;
q.push(s);
while(q.size())
{
s=q.front();
q.pop();
if(s.y==‘m‘)
{
success=1;
return ;
}
int i;
for(i=0;i<k;i++)
{
if(vis[i]==0&&s.y==c[i].x)
{
vis[i]=1;
e.y=c[i].y;
q.push(e);
}
}
}
}
int main(void)
{
int i,j,len;
char str[50];
k=0;
success=0;
while(scanf("%s",str)==1)
{
if(strcmp(str,"0")==0)
{
memset(vis,0,sizeof(vis));
bfs();
if(success)
printf("Yes.\n");
else
printf("No.\n");
k=0;
success=0;
}
len=strlen(str);
c[k].x=str[0]; c[k++].y=str[len-1];
}
return 0;
}
dfs代码
#include<stdio.h>
#include<string.h>
int success=0;
char str[1000][100];
int k=0;
int visit[1000];
int main(void)
{
void dfs(char zifu);
char zifu=‘b‘;
int i;
while(scanf("%s",&str[k])!=EOF)
{
if(str[k][0]==‘0‘)
{
memset(visit,0,sizeof(visit));
dfs(zifu);
if(success)
printf("Yes.\n");
else
printf("No.\n");
success=0;
zifu=‘b‘;
k=-1;
}
k++;
}
return 0;
}
void dfs(char zifu)
{
int i,l;
for(i=0; i<=k; i++)
{
if(visit[i]||zifu!=str[i][0])
continue;
if(zifu==‘m‘)
{
success=1;
return ;
}
visit[i]=1;
l=strlen(str[i]);
dfs(str[i][l-1]);
visit[i]=0;
}
return ;
}
HDU-1181-变形课