DFS+输出路线--poj2488--A Knight's Journey

地址

上一次做八数码的时候,自己把不输出路线的版本写了出来,对于记录路线的,也没去想怎么写,今天做到一个记录路线的dfs,正好写出来

这个代码中记录路线的办法非常清晰易懂,看了就会:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

struct aa{
    int x;
    int y;
};

bool markk;

aa qq[30];

int h,l,sum;
int v[30][30];
int movee[][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};

void dfs(int hh,int ll,int num){
    qq[num].x=hh;
    qq[num].y=ll;
    
    if(num==sum){
        markk=true;
        return;
    }
    
    int tx,ty;
    
    for(int i=0;i<8;i++){
        ty=ll+movee[i][1];
        tx=hh+movee[i][0];
        
        if(v[tx][ty]||tx<=0||tx>h||ty<=0||ty>l||markk) continue;
        v[tx][ty]=1;
        dfs(tx,ty,num+1);
        v[tx][ty]=0;
    }
    return;
}



int main(){

     int n;
     cin>>n;

     for(int i=1;i<=n;i++){
         markk=false;
         memset(v,0,sizeof(v));
         cin>>h>>l;
         sum=h*l;
         v[1][1]=1;
         dfs(1,1,1);
        printf("Scenario #%d:\n",i);
         if(markk){        

         for(int i=1;i<=l*h;i++){
             printf("%c",qq[i].y+64);cout<<qq[i].x;
         }
         cout<<endl;
         }
         else cout<<"impossible\n";
         cout<<endl;
    }
     return 0;
}

 

posted @ 2018-03-28 16:11  柳暗花明_liu  阅读(130)  评论(0编辑  收藏  举报