(输出路径搜索)[USACO06OCT] Cows on Skates G

1|0题目描述

本题使用 Special Judge。

Farmer John 把农场划分为了一个 r 行 c 列的矩阵,并发现奶牛们无法通过其中一些区域。此刻,Bessie 位于坐标为 (1,1)(1,1) 的区域,并想到坐标为 (,)(r,c) 的牛棚享用晚餐。她知道,以她所在的区域为起点,每次移动至相邻的四个区域之一,总有一些路径可以到达牛棚。

这样的路径可能有无数种,请你输出任意一种,并保证所需移动次数不超过 100000100000。

2|0输入格式

第一行两个整数 ,r,c。

接下来 r 行,每行 c 个字符,表示 Bessie 能否通过相应位置的区域。字符只可能是 . 或 *

  • . 表示 Bessie 可以通过该区域。
  • * 表示 Bessie 无法通过该区域。

3|0输出格式

若干行,每行包含两个用空格隔开的整数,表示 Bessie 依次通过的区域的坐标。

显然,输出的第一行是 1 1 ,最后一行是 r c

相邻的两个坐标所表示的区域必须相邻。

4|0输入输出样例

输入 #1
5 8 ..*...** *.*.*.** *...*... *.*.*.*. ....*.*.
输出 #1
1 1 1 2 2 2 3 2 3 3 3 4 2 4 1 4 1 5 1 6 2 6 3 6 3 7 3 8 4 8 5 8
复制代码
#include<bits/stdc++.h> using namespace std; const int N=2020; int r,c; struct node{ int x,y; }; char mp[N][N]; node pre[N][N]; bool vis[N][N]; int dx[]={1,-1,0,0},dy[]={0,0,1,-1}; void bfs(int i,int j) { node str; str.x=i,str.y=j; queue<node>que; que.push(str); vis[i][j]=true; while(!que.empty()) { node now=que.front(); que.pop(); if(now.x==r&&now.y==c) return; for(int i=0;i<4;i++) { node next; next.x=now.x+dx[i],next.y=now.y+dy[i]; if(!vis[next.x][next.y]&&mp[next.x][next.y]!='*'&&next.x>0&&next.x<=r&&next.y>0&&next.y<=c) { vis[next.x][next.y]=true; pre[next.x][next.y]=now; que.push(next); } } } } void print(node cur) { if(cur.x==1&&cur.y==1) {cout<<"1 1"<<endl;return;} print(pre[cur.x][cur.y]); cout<<cur.x<<" "<<cur.y<<endl; } int main() { cin>>r>>c; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin>>mp[i][j]; bfs(1,1); node ed; ed.x=r,ed.y=c; print(ed); return 0; }
复制代码

 


__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17455452.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
-- --
点击右上角即可分享
微信分享提示