`

poj 2488

 
阅读更多

题意:骑士周游问题,按照给你的走法,问骑士能否在p * q的棋盘上,从某个点出发不重复走遍棋盘每个点,如果能,输出骑士每步的位置(按字典序),如果不能,则输出impossible。

思路:很好的dfs,变1维为2维,但思路是差不多的,走法可能有多种,必须严格按照字典序走。   题目要求以"lexicographically"方式输出,也就是字典序...要以字典序输出路径,那么搜索的方向(我的程序记录位置的数组是path[]),以特殊的顺序排列了...这样只要每次从dfs(A,1)开始搜索,第一个成功遍历的路径一定是以字典序排列.注意回溯输出

代码如下:

#include<iostream>
using namespace std;
const int Max = 25;



bool visit[Max][Max], output;
int visit_num, p, q;      // visit_num记录要走的点数。
char path[2 * Max];       // path[]记录路径。
int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2};
int dy[8] = {-1, 1, -2, 2, -2, 2, -1, 1};   // 字典序。



void dfs(int depth, int x, int y)
{
    if(depth == visit_num)
	{
        for(int i = 0; i < 2 * depth; i ++)
            cout << path[i];
        cout << endl << endl;
        output = true;
        return;
    }
    for(int i = 0; i < 8 && output == false; i ++)
	{
		int new_x = x + dx[i];
		int new_y = y + dy[i];
		if(new_x > 0 && new_y > 0 && new_x <= q && new_y <= p && visit[new_y][new_x] == false)
		{
			visit[new_y][new_x] = true;
			
			path[2 * depth ] = 'A' + new_x - 1;
			path[2 * depth + 1] = '1' + new_y - 1;
			dfs(depth + 1, new_x, new_y);
			visit[new_y][new_x] = false;
			
        }
    }
	
}



int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++)
	{
        cin >> p >> q;
        cout << "Scenario #" << i << ':' << endl;
		
		
		
        for(int y = 1; y <= p; y ++)
            for(int x = 1; x <= q; x ++)
                visit[y][x] = false;
			visit_num = p * q;
			output = false;   
			visit[1][1] = true;
			path[0] = 'A';
			path[1] = '1';   // 初始化,设A1为首位置(证明如果能走完的话,必存在一条起点为A1的路径)
			dfs(1,1,1);
			
			
			
			if(output == false)
				cout << "impossible" << endl << endl;
    }
    return 0;
}

 

 关于DFS的问题未完待续……

 

 

 

 

分享到:
评论

相关推荐

    poj2488——dfs深度优先遍历

    poj 2488——dfs深度优先遍历 //给行数列数,求问能否遍历,给出字典序的一种遍历

    poj2488.rar_poj24_poj2488_方向模板法

    标题中的“poj2488.rar_poj24_poj2488_方向模板法”指的是一个解决编程竞赛问题POJ2488的压缩文件,其中可能包含了解决该问题的代码示例。POJ是Programming Online Judge的缩写,是一个在线的编程竞赛平台,参与者...

    POJ2488-A Knight's Journey【骑士游历】

    【标题】"POJ2488-A Knight's Journey【骑士游历】" 【知识点解析】 本题是来自北京大学在线编程平台POJ的一道经典算法题——“骑士游历”。题目要求解决的是一个典型的图论问题,即在国际象棋棋盘上,骑士能否...

    北大POJ初级-所有题目AC代码+解题报告

    【标题】"北大POJ初级-所有题目AC代码+解题报告" 涉及的知识点主要集中在编程、算法和在线判题系统方面。北京大学(Peking University, 简称PKU)的POJ(Peking University Online Judge)是一个为计算机科学爱好者...

    POJ算法题目分类

    * 深度优先搜索:深度优先搜索是指解决问题的深度优先搜索算法,如 poj2488、poj3083、poj3009、poj1321、poj2251。 * 广度优先搜索:广度优先搜索是指解决问题的广度优先搜索算法,如 poj3278、poj1426、poj3126、...

    树状数组练习:POJ 2481(JAVA)

    【标题】"树状数组练习:POJ 2481(JAVA)" 是一篇关于使用树状数组(也称为线段树)解决编程竞赛问题的文章。这篇文章可能详细讲解了如何运用这种数据结构来解决特定的问题POJ 2481。POJ(Programming Online Judge)...

    poj题目分类

    * 深度优先搜索:例如 poj2488、poj3083、poj3009、poj1321、poj2251。 * 广度优先搜索:例如 poj3278、poj1426、poj3126、poj3087、poj3414。 * 简单搜索技巧和剪枝:例如 poj2531、poj1416、poj2676、poj1129。...

    poj训练计划.doc

    - 深度优先搜索:如`poj2488, poj3083`。 - 广度优先搜索:如`poj3278, poj1426`。 - **动态规划** - 背包问题:如`poj1837, poj1276`。 - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ...

    ACM-POJ 算法训练指南

    1. **数论**:包括素数判定、欧几里得算法、扩展欧几里得算法等(poj2488, poj3083, poj3009, poj1321, poj2251)。 2. **组合数学**:如排列组合计算(poj3278, poj1426, poj3126, poj3087.poj3414)。 3. **矩阵...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **例题**:poj2488, poj3083, poj3009, poj1321, poj2251 - **解释**:基本动态规划问题通常涉及状态转移方程的设计与实现。 #### 2. 复杂动态规划 - **例题**:poj3278, poj1426, poj3126, poj3087, poj3414 - *...

    poj各种分类

    DFS和BFS不仅是图算法的核心,也是解决许多搜索问题的基础,如poj2488和poj3278所示。 #### 剪枝技术 在搜索过程中去除无效或低效的搜索路径,提高搜索效率,如poj2531和poj1416。 ### 五、动态规划 #### 背包...

    POJ题目简单分类(ACM)

    - **深度优先搜索**:如poj2488,常用于解决树或图的遍历问题。 - **广度优先搜索**:如poj3278,适用于寻找最短路径。 - **搜索技巧与剪枝**:优化搜索过程,避免无效计算,如poj2531。 5. **动态规划**: - *...

    acm训练计划(poj的题)

    - (poj2488, poj3083, poj3009, poj1321, poj2251):区间树、线段树等数据结构,用于处理区间查询问题。 6. **字典树(Trie)**: - (poj2513):一种高效的字符串检索数据结构。 ### 四、状态压缩 1. **状态...

    acm poj300题分层训练

    poj2488、poj3083等是DFS的练习,poj3278、poj1426等是BFS的题目。 5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj...

    经典 的POJ 分类

    - POJ 2488、POJ 3083:利用DFS遍历图或树。 - POJ 3009、POJ 1321:基于DFS的问题求解。 #### 广度优先搜索 (BFS) - **题目示例**: - POJ 2251:BFS的应用场景。 #### 其他搜索算法 - **题目示例**: - POJ ...

    acm新手刷题攻略之poj

    ### ACM新手刷题攻略之POJ ... - 推荐题目:[poj2488](https://vjudge.net/problem/POJ-2488)、[poj3083](https://vjudge.net/problem/POJ-3083)、[poj3009](https://vjudge.net/problem/POJ-3009)、[poj1321]...

    POJ 分类题目

    - poj2488 - poj3083 - poj3009 - poj1321 - poj2251 - **应用场景**:适用于迷宫问题、连通性检测等问题。 **2. 广度优先搜索** - **定义**:一种逐层扩展的搜索方式,从根节点开始,依次考虑所有节点。 - **...

    强大的POJ分类——各类编程简单题及其算法分类

    1. **深度优先搜索(DFS)**:遍历图或树的深度,如POJ2488、3083、3009、1321和2251。 2. **广度优先搜索(BFS)**:遍历图或树的宽度,如POJ3278、1426、3126、3087和3414。 3. **搜索技巧和剪枝**:提高搜索效率...

    POJ题目分类

    - **示例题目**: poj2488, poj3083, poj3009, poj1321, poj2251 #### 3. 后缀数组 - **内容**: 后缀数组是字符串的所有后缀按字典序排序后的数组。 - **示例题目**: poj3278, poj1426, poj3126, poj3087, poj3414 ...

Global site tag (gtag.js) - Google Analytics