站外题求助:一关
  • 板块学术版
  • 楼主Chalage_2010
  • 当前回复15
  • 已保存回复15
  • 发布时间2023/4/14 19:53
  • 上次更新2023/10/23 18:30:31
查看原帖
站外题求助:一关
760690
Chalage_2010楼主2023/4/14 19:53

题目描述

给定一个 n 行 m 列的迷宫,找出访问的单元格顺序,每次尝试按上、左、右、下的给定顺序移动。迷宫由0和1组成,其中1表示墙,0表示可以进入的有效单元格。我们的起始位置在左上角(0, 0)。

1 ≤ n,m ≤ 100

输入:

第一行是两个用空格分隔的整数 n 和 m,其中 n 是迷宫的行数,m 是迷宫的列数。

接下来的 n 行有 m 个用空格分隔的整数,表示墙或开放单元格。

输出:

一个 n x m 的矩阵,其中每个单元格表示单元格被访问的顺序。如果该单元格无法被访问,则将其放置为0。

示例输入:

3 4

0 0 0 0

1 0 1 0

0 0 0 0

示例输出:

1 2 3 4

0 9 0 5

10 8 7 6


我的代码

#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105],s[5]={0,0,-1,1,0},ss[5]={0,-1,0,0,1},num=1;
void f(int x,int y)
{
	a[x][y]=num;
	cout<<a[x][y]<<" ";
	for(int i=1;i<=4;i++)
	{
		if(a[x+s[i]][y+ss[i]]!=0)
		{
			return ;
		}
		else
		{
			num++;
			f(x+s[i],y+ss[i]);
			num--;
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]==1) a[i][j]=-1;
		}
	}
	f(1,1);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]==-1) a[i][j]=0;
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

不知道为什么,输出很奇怪

请各位大佬看看有什么问题

2023/4/14 19:53
加载中...