[DFS]FJSDFZOJ 1427 寻找国都名

来源:互联网 发布:虚拟网络电话软件 编辑:程序博客网 时间:2024/04/27 17:30

原题:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1427


时间: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行...

0 0
原创粉丝点击