其他网站的题目
  • 板块题目总版
  • 楼主曹操废了
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/12/6 10:01
  • 上次更新2023/11/5 06:33:00
查看原帖
其他网站的题目
344405
曹操废了楼主2020/12/6 10:01

RT

题目: 一个面积为n * n的森林,里面布满了陷阱,每个 陷阱有2种状态:s和d。前者表示陷阱已经被破坏,后者表示陷阱正常。现在探险家伊泽处在森林中的某个位置,他每次只能移动到上、下、左、右这四个方向之一的相邻位置上,伊泽想要从点A走到点B,但是伊泽不能走出森林,请你写个程序,判断伊泽能不能办到。如果起点或者终点有一个布置有正常的陷阱(状态为d),则看成无法办到。

输入描述 Input Description 第1行是测试数据的组数k。 每组测试数据的第一行数一个正整数n (1 <= n <= 100),表示森林的面积是n * n的。 接下来输入n * n的矩阵,矩阵中的元素为s或者d。 再接下来一行是4个整数a, b,c, d,描述A处在第a行, 第b列,B处在第c行, 第d列。 注意:a,b,c,d都是从1开始计数的。

输出描述 Output Description 能办到则输出“YES”,否则输出“NO”。

样例输入 Sample Input

2

3

sdd

ssd

dss

1 1 2 2

5

sssss

dddsd

ssdss

dddss

sssds 1 1 4 1

样例输出 Sample Output

YES

NO

偶的错误dfs

#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int k,dir[201][21]={{0},{-1,0},{0,1},{1,0},{0,-1}},x,y,a,b,n;
bool vis[101][101],f[101][101];
string l="NO";
void kx(int ex,int ey){
	f[ex][ey]=true;
	if(ex==a&&ey==b){
		l="YES";
		return ;
	}
	for(int i=1;i<=4;i++){
		int dx=ex+dir[i][0],dy=ey+dir[i][1];
		if(!vis[dx][dy]&&!f[dx][dy]&&dx>=1&&dy>=1&&dx<=n&&dy<=n){
			kx(dx,dy);
		}
	}
	return ;
}
int main(){ 
	///freopen("3849.in","r",stdin);
	//freopen("3849.out","w",stdout);
	cin>>k;
	while(k--){
		l="NO";
		cin>>n;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				char g;
				cin>>g;
				if(g=='d') vis[i][j]=true; 
				else vis[i][j]=false;
				f[i][j]=false; 
			}
		}
		cin>>x>>y>>a>>b;
		kx(x,y);
		cout<<l<<endl;
	}
	//fclose(stdout);
    return 0;
}

求大佬找错啊

2020/12/6 10:01
加载中...