swustOJ 1615寻宝
来源:互联网 发布:c语言逻辑运算真值表 编辑:程序博客网 时间:2024/04/29 23:16
给你一个地图,含有PEX,X表示墙,P表示入口,E表示能通过且只能通过一次,求出能否把地图上的所有E走完;
简单的DFS暴力,注意标记数组与回溯状态;
#include<stdio.h>#include<string.h>char map[10][10]; //地图数组int use[10][10]; //标记数组int n,m,sum,count,flag; //n,m长宽,sum为E的总数,count计数,flag表示YES or NO;int dir[4][2]={-1,0,0,-1,1,0,0,1}; //方向数组void DFS(int x,int y){ if(count==sum) //如果计数和总数相等,flag=1; { flag=1; return ; //记得要返回 } for(int i=0;i<4;i++) //搜索已该点为中心点的四个方向上的点 { int dx=x+dir[i][0]; int dy=y+dir[i][1]; if(dx>=0&&dx<n&&dy>=0&&dy<m&&map[dx][dy]=='E'&&!use[dx][dy]) //满足所有条件 { count++; //计数 use[dx][dy]=1; //标记这个点已经走过了 DFS(dx,dy); //搜索下一个点 count--; //返回到上一个点 use[dx][dy]=0; //返回状态 } }}int main(){ int a,b; while(scanf("%d%d",&n,&m)!=EOF) { flag=0; sum=0; count=0; memset(use,0,sizeof(use)); for(int i=0;i<n;i++) scanf("%s",map[i]); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(map[i][j]=='E') //记录总数 sum++; if(map[i][j]=='P') //记录起始P点 { a=i; b=j; } } } DFS(a,b); //搜索整个图; if(flag) printf("YES\n"); else printf("NO\n"); }return 0;}
0 0
- swustOJ 1615寻宝
- 寻宝.....!
- 寻宝
- swustoj---1091
- swustoj(667)
- swustoj---254翻煎饼
- swustoj----142猴子报数
- swustoj---700Delete Numbers
- 翻煎饼 swustoj 254
- swustOJ 1378 Best Grass
- swustOJ 1107 单向公路
- swustoj 143 汉诺塔问题
- swustoj---251邮票
- swustoj Locker doors(0480)
- swustoj沙漠储油点
- swustoj(翻煎饼)
- swustoj(0541)
- swustoj似曾相识(0314)
- LCS算法&最大公共子串&最长公共子序列 PHP 实现
- 继承初始化顺序
- 构建项目Maven+SpringMVC+Spring+Mybatis
- c语言基础概念(3)
- 归并排序
- swustOJ 1615寻宝
- spring-mvc.xml参考
- js定义对象的方法和继承的方法
- uint8_t / uint16_t / uint32_t /uint64_t
- Disunity_V0.5.0 提取Unity生成的Apk的资源
- 实战iOS7之NSURLSession
- [乱搞] BZOJ 2296 [POJ Challenge] 随机种子
- Java 浅谈集合框架
- Jquery开发插件