P6207 [USACO06OCT] Cows on Skates G

前言

题目详情

本人AC记录

正文

读完题目后,综合算法标签,我们不难知道,这是一道搜索题,既可以用深搜(DFS)来做,也可以用广搜(BFS)来做。由于题目中只要求输出一种路径,在此篇中只采取更合适的深搜做法,广搜做法不予讨论。下面直接上代码

Code

#include<iostream>
using namespace std;
int r,c;
char sq[200][200];
bool st[200][200]={false};
int ansx[10001],ansy[10001];
int fx[]={0,-1,1,0};
int fy[]={1,0,0,-1};
void dfs(int x,int y,int step)
{
	if(x==r&&y==c)
	{
		for(int i=1;i<step;i++)
		{
			cout<<ansx[i]<<" "<<ansy[i]<<endl;
		}
		cout<<r<<" "<<c<<endl;
		return;
	}
	ansx[step]=x;
	ansy[step]=y;
	for(int i=0;i<4;i++)
	{
		int tx=x+fx[i];
		int ty=y+fy[i];
		if(tx>=1&&tx<=r&&ty>=1&&ty<=c&&st[tx][ty]==false)
		{
			st[tx][ty]=true;
			dfs(tx,ty,step+1);
		}
	}
}
int main()
{
	cin>>r>>c;
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			cin>>sq[i][j];
			if(sq[i][j]=='*') st[i][j]=true;
		}
	}
	st[1][1]=true;
	dfs(1,1,1);
	return 0;	
} 

在代码中,我们将路径的行和列分别存在两个数组里,当达到终点时输出,并利用st数组(visit状态数组)判断是否能走,使用step来表示路径长度,以便于输出。

注意点

1.要在深搜开始前,将出发点标为true,否则会0AC(亲身经历)

2.在输入时要将障碍处标记成true

3.在达到目标点输出时,循环条件要让i<r,然后再循环外输出r和c。如果不想这么麻烦,也可以先把r和c分别存到ansx和ansy中在进行输出,此时循环条件为i<=r,两种方法效果一样,看个人喜好

4.最好在这题上面不要擅自修改地图,有可能会WA或TLE(亲身经历)

5.至少要将sq数组和st数组的空间开到[150][150],否则最后一个测试点会RE(亲身经历)

后记

本人创作不易,后续有时间的时候我将第一时间更新,不知可否要到您的一个赞和关注,感激不尽!

本人洛谷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值