[DFS]FJSDFZOJ 1427 寻找国都名
2014-02-03 13:52
295 查看
原题:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1427
时间:2014.2.3
类型:回溯,dfs
源码:
最后状态:AC
总结:写的不怎么样,167行...
时间:2014.2.3
类型:回溯,dfs
源码:
#include<iostream> #include<cstdio> #include<string> using namespace std; int m,n,d[11],beginh,beginl; char map[11][11]; string ob; bool ans=false,first=true; void search(int i,int j,int s,int num) { if(num==ob.size()) { ans=true; } if(ans) { return; } switch(s) { case 0: beginh=i; beginl=j; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; case 1: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 2: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 3: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 4: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 5: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 6: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 7: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } case 8: if(ob[num]==map[i][j]) { d[num]=s; if(j+1<=n) { search(i,j+1,1,num+1); } if(j-1>=1) { search(i,j-1,2,num+1); } if(i+1<=m) { search(i+1,j,3,num+1); } if(i-1>=1) { search(i-1,j,4,num+1); } if(j-1>=1&&i+1<=m) { search(i+1,j-1,5,num+1); } if(j+1<=n&&i-1>=1) { search(i-1,j+1,6,num+1); } if(j+1<=n&&i+1<=m) { search(i+1,j+1,7,num+1); } if(j-1>=1&&i-1>=1) { search(i-1,j-1,8,num+1); } break; } } } int main() { cin>>m>>n; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { cin>>map[i][j]; } } cin>>ob; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(ob[0]==map[i][j]) search(i,j,0,0); } } if(ans) { cout<<beginh<<" "<<beginl<<endl; for(int i=1;i<=ob.size()-1;i++) { cout<<d[i]; } } else cout<<"No Answer!"; return 0; }
最后状态:AC
总结:写的不怎么样,167行...
相关文章推荐
- [DFS]FJSDFZOJ 1423 n皇后
- [DFS]FJSDFZOJ 1421 数字排列问题
- [DFS]FJSDFZOJ 1420 0/1背包问题
- [DFS]FJSDFZOJ 1260 城市交通
- [DFS]FJSDFZOJ 1261 整数拆分
- [DFS]FJSDFZOJ 1412 四色问题
- [DFS]FJSDFZOJ 1079/NOIP2002 选数
- [贪心]FJSDFZOJ 1133 活动安排问题
- [DP]FJSDFZOJ 1283 机器分配
- [字符串]FJSDFZOJ 1075 统计单词数
- FJSDFZOJ 1109 统计数字
- [字符串]FJSDFZOJ 1134 整数去位
- [DP]FJSDFZOJ 1386 最大连续子段和问题
- [DP]FJSDFZOJ 1143 数字三角形
- zoj 2100Seeding(dfs+回溯)
- HDU 1010 && ZOJ 2110--Tempter of the Bone【DFS && 奇偶剪枝】
- EOJ 2527 Fj & haozi【dfs】
- ZOJ - 3983 - Crusaders Quest(DFS)
- zoj 2412 dfs
- zoj 1654 Place the Robots 二分图匹配DFS实现