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;
    }


  • 相关阅读:
    实习期收获(一)
    实习期上班两天感触
    做bbs论坛项目的收获(1)
    ios多线程
    C 预处理小结
    Xcode8 问题
    Unity3d收藏链接/ 小马哥视频
    H5(1)
    ios-loadView
    iOS开发UI篇—程序启动原理和UIApplication
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000345.html
Copyright © 2011-2022 走看看