hdu 1181 变形课 (深搜)
来源:互联网 发布:淘宝卖家好评的好处 编辑:程序博客网 时间:2024/06/10 02:41
看题目请点这里
题意:
中文题不解释。
根据所给单词,建立一张26x26的地图,0-25分别代表a-z。行数代表单词开头字母,列数代表单词的最后一个字母。
如abcd,开头字母为a,最后一个字母为d,那么让map[0][3]=1,表示该单词存在。
然后根据地图从map[1][i](0<=i<=25)=1的开始搜即可。
代码:
#include<stdio.h>#include<string.h>bool map[26][26]={false},judge[26][26]={false},flag=false;void dfs(int x,int y) //深搜{if(y=='m'-'a') //找到m结尾的{flag=true;return ;}if(flag) //找到满足条件的答案,不必再搜{return ;}int X,i;X=y; //查找以这个单词最后一个字母开头的单词for(i=0;i<26;i++){if(map[X][i]==1 && judge[X][i]==false){judge[X][i]=true; //用过,不必再用dfs(X,i);}}}int main(){int i;char s[100];while(scanf("%s",s)!=EOF){if(strcmp(s,"0")==0) //判断本次输入是否结束{for(i=0;i<26;i++) //查找以b开头的单词{if(map['b'-'a'][i]==1){judge['b'-'a'][i]=true; //true表示用过,不必再用dfs('b'-'a',i);if(flag) //判断深搜是否成功{puts("Yes.");break;}}}if(i==26) //i=26表示没搜到满足条件的答案{puts("No.");}flag=false; //数据初始化memset(map,false,sizeof(map));memset(judge,false,sizeof(judge));}else{map[ s[0]-'a' ][ s[ strlen(s)-1 ]-'a' ]=true; //建立一张地图}} return 0;}在搜索之前也可以算算以首字母为b的单词和最后一个字母为m的单词是否都存在来优化一下。
- hdu 1181 变形课 (深搜)
- HDU--1181--变形课(深搜)
- hdu 1181 变形课
- HDU 1181 变形课
- hdu 1181 变形课
- hdu 1181 变形课
- HDU 1181 变形课
- hdu 1181 变形课
- hdu 1181 变形课
- hdu 1181 变形课
- HDU 1181 变形课
- hdu 1181 变形课
- 变形课 hdu 1181
- hdu-1181-变形课
- HDU 1181 变形课
- HDU 1181 变形课
- HDU 1181【变形课】
- hdu-1181-变形课
- csdn
- 【操作系统篇】文件系统
- unix 文件清理一例
- JAVA--第四周实验--任务1--编写应用程序,求1000之内的所有完数。(编程思想)
- java获取本地局域网的外网IP ....
- hdu 1181 变形课 (深搜)
- ClassLoader学习
- vi复制 剪切 删除 多行的方法(汇总)
- 康佳软件方向笔试题2012年9月19号郑大
- “接口”杂谈
- HDU-1005
- linux/ubuntu计算程序运行时间方法
- 实模式和保护模式
- Pthreads-Win32的使用和一些问题