dfs-hdu2782
来源:互联网 发布:淘宝商品管理 编辑:程序博客网 时间:2024/06/08 07:03
题目:hdu2782
题意:
选择任意一个点作为起始点能否遍历到所有的点。
开始时选择一个方向,如果没有碰到障碍物,边界就一直按照这个方向走下去。
如果有多个起点选择行列数最小的作为答案,同一个起点如果有多条路线则按照字典中字母顺序排在前面的作为答案
#include<cstdio>#include<iostream>#include<cstring>using namespace std;bool vis[630][630],ma[630][630];int x1,yt,z1,x2,y2,z2,cnt,m,n;int d[4][2]={0,1,-1,0,1,0,0,-1};char d1[]={'E','N','S','W'};void dfs(int a,int b,int c,int step){ if(step>cnt) { cnt=step; x2=x1;y2=yt;z2=z1; } int nx=a+d[c][0]; int ny=b+d[c][1]; if(vis[nx][ny]&&ma[nx][ny]&&nx>=0&&nx<m&&ny>=0&&ny<n) { vis[nx][ny]=false; dfs(nx,ny,c,step+1); vis[nx][ny]=true;//回溯 } else { if(step==0) return ; for(int i=0;i<4;i++) { if(i==c) continue; nx=a+d[i][0]; ny=b+d[i][1]; if(vis[nx][ny]&&ma[nx][ny]&&nx>=0&&nx<m&&ny>=0&&ny<n) { vis[nx][ny]=false; dfs(nx,ny,i,step+1); vis[nx][ny]=true; } } }}int main(){ int num=1; while(scanf("%d%d",&m,&n)&&m&&n) { memset(vis,true,sizeof(vis)); memset(ma,true,sizeof(ma)); int t; scanf("%d",&t); int x,y; while(t--) { scanf("%d%d",&x,&y); ma[x][y]=false; } cnt=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) for(int k=0;k<4;k++) { if(ma[i][j]) { x1=i;yt=j;z1=k; vis[i][j]=false; dfs(i,j,k,0); vis[i][j]=true; } } printf("Case %d: %d %d %d %c\n",num++,cnt+1,x2,y2,d1[z2]); } return 0;}
0 0
- dfs-hdu2782
- 【DFS】 hdu2782 The Worm Turns
- HDU2782 The Worm Turns(DFS水)
- HDU_Steps9.3 杂题 HDU2832 HDU2604 HDU1429 HDU2782 HDU1298 HDU2363 HDU3389 HDU1496
- DFS
- DFS
- dfs
- dfs
- dfs
- dfs
- DFS
- DFS
- dfs
- DFS
- DFS
- DFS
- dfs
- DFS
- [背包DP || 多项式] 51Nod 1597 有限背包计数问题
- 枚举算法
- web2——景点主页
- 交叉验证(cross_validation)
- POJ 1029 False coin 笔记 模拟
- dfs-hdu2782
- Spring Boot集成CKFinder-优化
- 剑指offer--面试题13:在O(1)时间删除链表结点
- HTTP协议之基本认证
- 零xml配置Spring MVC文件上传
- jQuery选择器实例列表
- ZOJ 1027 Human Gene Functions(最长公共子序列)
- mybatis3--3.mybatis开发dao的方法
- 【51单片机】常用波特率初值表