题目大意
给定一个字符型二维数组,给定n,mn,mn,m 作为边界,给定sx,sysx,sysx,sy作为起点,fx,fyfx,fyfx,fy作为终点。需要判断能否从(sx,sy)( sx, sy )(sx,sy)走到(fx,fy)( fx, fy )(fx,fy),可以输出 YESYESYES, 不可以输出 NONONO。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
输入格式
第一行两个整数n,mn,mn,m,第二行四个整数sx,sy,fx,fysx,sy,fx,fysx,sy,fx,fy,接下来nnn行,每行输入mmm个字符。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
输出格式
一行,YESYESYES或NONONO。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
思路&代码实现
使用广度优先搜索和深度优先搜索都可以。
1.定义
定义n,m,sx,sy,fx,fyn,m,sx,sy,fx,fyn,m,sx,sy,fx,fy,字符数组aaa,方向数组dirx,dirydirx,dirydirx,diry,标记数组visvisvis和一个voidvoidvoid类型的bfsbfsbfs函数,给定两个参数x,yx,yx,y。(dfsdfsdfs函数也可以)。使用bfsbfsbfs函数需要定义结构体nodenodenode。
2.输入
输入n,m,sx,sy,fx,fyn,m,sx,sy,fx,fyn,m,sx,sy,fx,fy和字符二维数组aaa。
3.定义BFSBFSBFS函数
1.先在bfsbfsbfs函数里定义一个nodenodenode类型的队列qqq
2.把bfsbfsbfs函数的两个参数x,yx,yx,y入队
3.标记(x,y)(x,y)(x,y)为已走过
4.写一个whilewhilewhile循环,当qqq不为空时,就重复取队首并出队。
5.每次判定是否为终点,是则输出YESYESYES并结束函数,不是则继续执行
6.遍历当前位置的上下左右邻居,如果合法,就入队到qqq里,并标记这个点已走过
7.若循环结束,还没有输出,则是不能走到终点,输出NONONO
8.完整代码
4.调用函数
在主函数里调用bfsbfsbfs,参数为sx,sysx,sysx,sy。
5.完整代码
最后
制作不易,点个赞呗