HDU1181 变形课
来源:互联网 发布:流星网络电视怎么注册 编辑:程序博客网 时间:2024/06/05 22:45
问题链接:HDU1181 变形课。
问题简述:参见上述链接。
问题分析:这个问题就是一个单词接龙游戏,看能不能从b接到m。可以使用DFS来实现。计算过程中是没有必要存储整个单词,只需要存储单词的首尾字符就可以了。
程序说明:DFS处理过程中,使用visit[]数组记忆已经访问过的单词。如果找到解则置标志yesflag为1,作为搜索的结束条件。
读入数据时,没有使用scanf()函数,而是使用getchar()函数。这样做需要更高的技巧,需要了解更底层的字符流。一次读入一个字符串的话,需要一个字符数组作为缓冲存储,处理时间也会略长。
AC通过的C语言程序如下:
/* HDU1181 变形课 */#include <stdio.h>#include <memory.h>#define START 'b'#define END 'm'#define MAXN 1024char start[MAXN];char end[MAXN];int visit[MAXN];int n;int yesflag;void dfs(char v){ int i; if(v == END) { yesflag = 1; return; } for(i=0; i<n; i++) { if(yesflag) break; if(!visit[i] && start[i] == v) { visit[i] = 1; dfs(end[i]); visit[i] = 0; } }}int main(void){ char c; while((c=getchar()) != EOF) { // 重复读入n个单词 n = 0; for(;;) { // 首字符 start[n] = end[n] = c; // 判定字符串结束 if(start[n] == '0') { getchar(); // 去除换行符 break; } // 读入一行; while((c=getchar()) != '\n') end[n] = c; n++; c = getchar(); // 下一行的首字符 } yesflag = 0; memset(visit, 0, sizeof(visit)); if(n > 0) dfs(START); // 输出结果 if(yesflag) printf("Yes.\n"); else printf("No.\n"); } return 0;}
1 0
- hdu1181 变形课 dfs
- 变形课 hdu1181 图论
- HDU1181:变形课(DFS)
- hdu1181(变形课)
- HDU1181 变形课
- HDU1181:变形课(DFS)
- hdu1181 变形课
- HDU1181---变形课
- hdu1181 变形课【dfs】
- HDU1181:变形课 【dfs】
- hdu1181(变形课)
- HDU1181 变形课(DFS)
- hdu1181 变形课
- HDU1181:变形课(DFS)
- 【DFS】HDU1181变形课
- HDU1181 变形课 DFS
- hdu1181变形课
- HDU1181 变形课
- 59条令人捧腹但真实的程序员编程语录
- int,long,long long类型的数值范围
- Longest Valid Parentheses
- 那些做Android开发必须知道的ADB命令
- 搜索引擎研究---网络蜘蛛程序算法相关资料 Part VI (共5部分)
- HDU1181 变形课
- for使用
- first day
- 基于 CoreText 实现的高性能 UITableView
- poj1269直线交点
- 基于随机森林的特征选择算法
- 搜索引擎研究---网络蜘蛛程序算法相关资料 Part V (共5部分)
- Poj 1947 Rebuilding Roads
- JS 根据今天的日期获取本周星期一与星期天的日期