poj2488 深度优先搜索

来源:互联网 发布:怎样网络销售 编辑:程序博客网 时间:2024/06/05 19:06

#include<stdio.h>     //标准c输入/输出#include<string.h>#include<cstring>   //字符串操作#include<stdlib.h>#include<iostream>    //标准c++输入/输出#include<math.h>#include<iomanip>     //标准C++的I/O manipulator(操纵器?)#include<queue>using namespace std;  //使用std命名空间int jump_x[9];int jump_y[9];bool chessboard[30][30];int counts;bool finds;typedef struct node{int x;int y;}node;node que[10000];void init(){jump_x[1]=-2;jump_y[1]=-1;jump_x[2]=-2;jump_y[2]=1;jump_x[3]=-1;jump_y[3]=-2;jump_x[4]=-1;jump_y[4]=2;jump_x[5]=1;jump_y[5]=-2;jump_x[6]=1;jump_y[6]=2;jump_x[7]=2;jump_y[7]=-1;jump_x[8]=2;jump_y[8]=1;int i,j;}void init1(){int i,j;for(i=0;i<30;i++)for(j=0;j<30;j++)chessboard[i][j]=false;}int p,q;void dfs(int cur_x,int cur_y,int counts){if (counts==p*q){finds=true;return;}if (cur_x>q||cur_x<1||cur_y>p||cur_y<1){return;}int i;for(i=1;i<=8;i++){int new_y=jump_y[i]+cur_y;int new_x=jump_x[i]+cur_x;if (new_y<=p&&new_y>=1&&new_x<=q&&new_x>=1&&chessboard[new_y][new_x]==false){chessboard[new_y][new_x]=true;que[counts+1].x=new_x;que[counts+1].y=new_y;dfs(new_x,new_y,counts+1);if (finds==true){return;}chessboard[new_y][new_x]=false;}}}int main(){int n;int i,j,k;cin>>n;init();init1();p=4,q=3;for(i=1;i<=n;i++){finds=false;cin>>p>>q;cout<<"Scenario #"<<i<<':'<<endl;for(k=1;k<=p;k++){for(j=1;j<=q;j++){init1();chessboard[k][j]=true;que[1].x=j;que[1].y=k;dfs(j,k,1);if (finds==true){break;}}if (finds==true){break;}}if (finds==false){cout<<"impossible"<<endl;cout<<endl;}else{for(k=1;k<=p*q;k++){   char c='A';   cout<<(char)(c+que[k].x-1)<<que[k].y;}cout<<endl<<endl;}}}

建议:以后写格子的问题确定格子位置还是使用column和row命名比较好,用x,y容易弄反,导致wa了N次