POJ2488

来源:互联网 发布:北京美特软件 编辑:程序博客网 时间:2024/06/05 08:23
//10790086c00h00g2488Accepted256K0MSC++922B2012-09-10 14:05:42//我的vs 2005绝对是不能用了,竟然输出结果都是错误的,在visual c++ 6.0上就成功了//这一题要求按照地点序列输出就要求按照指定的方向来寻找,行用1,2,3...标识,列用A,B,C...来标识//考察:深搜+回溯#include<iostream>using namespace std;int dir[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};int N,p,q;int visited[27][27];struct Node{int x,y;};Node nd[28];bool res;void dfs(int x,int y,int len){if(res)return;visited[x][y]=1;nd[len].x=x;nd[len].y=y;if(len==p*q){res=true;for(int i=1;i<=len;i++)cout<<(char)(nd[i].y+64)<<nd[i].x;return;}for(int i=0;i<8;i++){int a=x+dir[i][0];int b=y+dir[i][1];if(a>0&&a<=p&&b>0&&b<=q){if(visited[a][b]==0&&res==false){dfs(a,b,len+1);if(res)return;//若已经找到则不回溯,直接返回visited[a][b]=0;//回溯}}}}int main(){cin>>N;int k=0;while(N--){k++;cout<<"Scenario #"<<k<<":"<<endl;cin>>p>>q;memset(visited,0,sizeof(visited));res=false;dfs(1,1,1);if(res==false)    cout<<"impossible\n";else cout<<endl;cout<<endl;}return 0;}

原创粉丝点击