EOJ Monthly 2018.8 B. Bad Queen(搜索)

题目链接:https://acm.ecnu.edu.cn/contest/103/problem/B/

       题意是有一个皇后要把地图上每一个点都走一遍,可以上下左右和斜着走,每次走的步数也没有限制,输入地图大小n*m,输入起始点,然后输出每次所走的坐标。

       其实就是一个蛇皮走位,一行一行遍历,当这一行走不了的时候走下一行。因为以前没写过走任意步数的,所以一直想不到怎么实现...


AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 105
using namespace std;
int n,m,x,y,num;
bool vis[maxn][maxn];
struct Node{
	int x,y;
}Edge[maxn * maxn];

void dfs(int x,int y){
	if(num == n * m - 1){
		return ;
	}
	for(int i=1;i<=n;i++){
		if(vis[i][y] == 0){
			Edge[num].x = i;
			Edge[num++].y = y;
			vis[i][y] = 1;
			dfs(i,y);
		}
	}
	for(int i=1;i<=m;i++){
		if(vis[x][i] == 0){
			Edge[num].x = x;
			Edge[num++].y = i;
			vis[x][i] = 1;
			dfs(x,i);
		}
	}
}

int main()
{
	scanf("%d%d%d%d",&n,&m,&x,&y);
	memset(vis,false,sizeof(vis));
	vis[x][y] = 1;
	num = 0;
	dfs(x,y);
	for(int i=0;i<num;i++){
		printf("%d %d\n",Edge[i].x,Edge[i].y);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Charles_Zaqdt/article/details/81605198