poj2488

水題,不解釋。。。
#include<iostream>
#include <cstring>
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++;
        cin>>p>>q;
        cout<<"Scenario #"<<k<<":"<<endl;
        memset(visited,0,sizeof(visited));
        res=false;
        dfs(1,1,1);
        if(res==false)
            cout<<"impossible\n";
        else
            cout<<endl;
        cout<<endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章