HDU 1181 变形课(DFS)

#include <stdio.h>
#include <string.h> 
char start[1024];//字母开头储存 
char end[1024];//字母结尾储存 
int flag[1024];//标记 
int n;
int visit;
void DFS(char x)
{
	if(x=='m')//如果x的值是m表明咒语符合要求。标记为一。 
	{
		visit=1;
		return ;
	}
	for(int i=0;i<n;i++)//n个单词循环 
	{
		if(visit)//符合跳出 
		break;
		if(!flag[i]&&start[i]==x)//如果单词没有调用过且开头字母符合x,则往下DFS 
		{
			flag[i]=1;//标记这个单词为一  
			DFS(end[i]);//用这个单词的结尾继续DFS 
			flag[i]=0;//DFS失败,重新标为零 
		}
	}
}

int main(int argc, char *argv[])
{
	char c;
	while((c=getchar())!=EOF)//读入n个单词 
	{
		n=0;
		int mmp=0;
		for(;;)//将每个字母进行循环取开头字母和结尾字母 
		{
			start[n]=end[n]=c;//将字母的开头存入数组 
			if(start[n]=='0')//输入值为零,数据结束 
			{
				getchar();
				break;
			}
			while((c=getchar())!='\n')//循环单词取单词末尾单词 
				end[n]=c;	//记录单词结尾字母 
			n++;//标记单词数
			c=getchar(); //读取下一个单词 
		}
		visit=0;
		memset(flag,0,sizeof(flag));
		for(int i=0;i<n;i++)
		{
			if(start[i]=='b')
				mmp=1;
		} 
		if(mmp==1)//表示有字母 
		DFS('b');//用b开始DFS 
		if(visit)//有解 
		printf("Yes.\n");
		else
		printf("No.\n");		
	}	
	return 0;
}
//修订注释版2.0 
//Start-ZJ
//2017/9/21/ 18:28 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值