搜索
深度优先搜索 DFS
采用递归实现,需要辅助数组,记录路径时需要用数组或栈。
9.3A Knight’s Journey
用深度优先算法DFS判断是否有解的问题。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
using namespace std;
/*
题目:
骑士走日(即一步可以向斜上下左右两格方向移动,共8个方向),
棋盘纵轴顺序为A,B,C...,横轴顺序为1,2,3...,
在棋盘中找到一条可以遍历棋盘每一个格子的路径。
输入:
第一行输入n,代表有n种棋盘,
往后n行每行输入p和q(1 <= p*q <= 26),代表横向有p块,纵向有q块。
输出:
每个输出以"Scenario #i"开头,
再输出一个路径即走过的格子集合,需按字典顺序输出,
没有路径则输出"impossible"。
*/
int direction[8][2] = {
//8个方向
//按字典顺序输出,则先让y值减小,再让x值减小
{
-1,-2},{
1,-2},{
-2,-1},{
2,-1},{
-2,1},{
2,1},{
-1,2},{
1,2}
};
bool isvisit[50][50];
bool DFS(int x, int y, int cur, int p, int q, string path) {
//x当前格子横轴,y当前格子纵轴,cur当前走过的格子数,p棋盘横向数,q棋盘纵向数,path路径即走过的点集合
//把本节点加入路径
path += (y + 'A');//棋盘纵轴顺序为A,B,C...
path += (x + '1')