zoukankan      html  css  js  c++  java
  • POJ 2488 A Knight's Journey

    经典的骑士巡游问题,注意字典序最小,应该从上到下,从左到右遍历

    #include <iostream>
    #include <cstdio>
    #include <vector>
    using namespace std;
    
    const int maxn=30;
    int di[]={-1,1,-2,2,-2,2,-1,1},dj[]={-2,-2,-1,-1,1,1,2,2},n,m;
    bool vis[maxn][maxn];
    vector<char>stak;
    
    bool backtraking(int ci,int cj,int cnt){
    	vis[ci][cj]=1;
    	if(cnt==0){
    		for (int i=0;i<stak.size();++i)
    		{
    			printf("%c",stak[i]);
    		}
    		printf("\n");
    		return true;
    	}
    	for (int i=0;i<8;++i)
    	{
    		int ni=ci+di[i],nj=cj+dj[i];
    		if(ni>=0&&ni<n&&nj>=0&&nj<m&&!vis[ni][nj]){
    			stak.push_back('A'+nj),stak.push_back('1'+ni);
    			if(backtraking(ni,nj,cnt-1))return true;
    			stak.pop_back(),stak.pop_back();
    		}
    	}
    	vis[ci][cj]=0;
    	return false;
    }
    int main(){
    	int t,cas=1;
    	scanf("%d",&t);
    	while (t--)
    	{
    		scanf("%d%d",&n,&m);
    		int i,j;
    		
    		for (int i=0;i<30;++i)
    			for (int j=0;j<30;++j)vis[i][j]=0;
    		printf("Scenario #%d:\n",cas++);
    		stak.clear();
    		for (i=0;i<m;++i)
    		{
    			for (j=0;j<n;++j)
    			{
    				stak.push_back('A'+i),stak.push_back('1'+j);
    				if(backtraking(j,i,n*m-1))break;
    				stak.pop_back(),stak.pop_back();
    			}
    			if(j<n)break;
    		}
    		if(i>=m)printf("impossible\n");
    		printf("\n");
    	}
    	return 0;
    }


  • 相关阅读:
    HDU 1159 Common Subsequence 动态规划
    poj2349 Arctic Network
    hdu1596 find the safest road
    poj 1011
    二进制枚举
    codeforces 626E Simple Skewness
    code for 1
    painting fence
    codeforces 797c minimal string
    POJ 3977
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000345.html
Copyright © 2011-2022 走看看