HDU 1181
2016-04-05 19:07
134 查看
这是一道经典的搜索题,不求最短路,只要求找出有没有通路即可。
首先把输入的单词首尾字母另存在一个数组里,然后设个邻接矩阵,判断是否相连而且遍历过,没有则判断是否到终点,也没有则递归,如果完全走完什么都没有,则不会有通路。
首先把输入的单词首尾字母另存在一个数组里,然后设个邻接矩阵,判断是否相连而且遍历过,没有则判断是否到终点,也没有则递归,如果完全走完什么都没有,则不会有通路。
#include<stdio.h> #include<string.h> int deep(int s[100][100],int c[100],int k,char b[100][3]) { int j; c[k]=1; for(j=0; j<100; j++) { if(s[k][j]==1&&c[j]==0) { if(b[j][1]=='m') return 1; else if(deep(s,c,j,b)) return 1; } } return 0; } int main() { int e,k; char a[100][100],b[100][3],ch; int i,j,an,c[100],s[100][100]; memset(a,'2',sizeof(a)); memset(b,'2',sizeof(b)); while(scanf("%s",a[0])!=EOF) { for(i=1; i<100; i++) { scanf("%s",a[i]); if(a[i][0]=='0') break; } for(i=0; i<100; i++) { an=strlen(a[i]); b[i][0]=a[i][0]; b[i][1]=a[i][an-1]; } memset(s,0,sizeof(s)); for(i=0; i<100; i++) for(j=0; j<100; j++) { if(b[i][1]==b[j][0]) s[i][j]=1; else s[i][j]=0; } e=0; memset(c,0,sizeof(c)); for(i=0; i<100; i++) { if(b[i][0]=='b') { if(b[i][1]=='m') { e=1; break; } k=i; if(deep(s,c,k,b)) { e=1; break; } } } if(e==1) printf("Yes.\n"); else printf("No.\n"); memset(a,'2',sizeof(a)); memset(b,'2',sizeof(b)); } return 0; }
相关文章推荐
- 第五周项目2(1)
- 课堂翻译
- poj 2996 Help Me with the Game 模拟
- java反射
- TPC-H数据导入postgresql教程
- java反射
- JAVA实验二类的创建及封装
- 【Win 10 应用开发】加载外部的 srt 字幕
- qt的编译
- tomcat、servlet学习
- Cluster
- 第五周上机实践项目 项目2--游戏中的角色类(1)
- 推荐系统算法初探
- Android 6.0 权限管理详解
- CAE(Convolutional Auto-Encode) 卷积自编码
- Codeforces Round #251(Div. 2) 439B. Devu, the Dumb Guy 贪心
- 对象的一对一关系
- improve
- 第五周项目1(5)
- DLL调试方法