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. ");
else
printf("No. ");
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. ");
else
printf("No. ");
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 ;
}

原文地址:https://www.cnblogs.com/liudehao/p/4137269.html