题目链接: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;
}