swustoj 8 snakes 的探索

谷歌翻译
布法罗·比尔(Buffalo Bill)希望跨越1000x1000平方英寸的字段。 场上的不同位置上有许多蛇,每条蛇可以在任何方向上撞击特定的距离。 比尔能不被咬住而旅行吗? 假定该字段的西南角在(0,0),西北角在(0,1000)。 输入由包含n <= 1000(蛇的数量)的行组成。 每条蛇都有一条直线,其中包含三个实数:蛇的(x,y)位置及其触击距离。 蛇会咬任何比其位置更近的东西。 比尔必须进入西南和西北角之间的区域,并且必须离开东南和东北角之间的区域。 如果比尔可以完成这次旅行,请给出他可以进入和离开该字段的坐标。 如果比尔可能在几个地方进出,请向北偏北。 如果没有这样的位置,则打印“比尔将被咬”。
大意:就是说一个人从西边过来,到东北去,途中有蛇,回攻击以它为圆心的范围的人,给出几条蛇位置和攻击范围,问人可以过去吗,如果能就打出人最后进入和 离开偏北的位置,若不能就到出 Bill will be bitten.

拿到题第一个想法是用二维数组表示地图,

考虑过不去,就是蛇的圈香蕉,把上下连接起来,用dfs来判断是否封路,把不能去的范围标记(用dfs)

找最出去点的话,就是在输入蛇时把与上界香蕉,且与右边香蕉的点找到(dfs)就是出去点

找进入同上

于是想利用 dfs
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include <math.h>
using namespace std;
int n;//蛇的数量
int bu[4][2]={1,0,-1,0,0,1,0,-1};//左 右 上 下 走
bool a[1000][1000]={0};bool b[1000][1000]={0};int jx,jy;int ji[10][2];
int nj=0;
void shuru(int x,int y,int o){//输入不能去的范围
if(sqrt(pow(jx-x,2)+pow(jy-y,2))<=o&&x<1000&&x>=0&&y<1000&&y>=0&&b[x][y]==0){
// printf("%d %d\n",x,y);
a[x][y]=1;b[x][y]=1;nj++;
for(int i=0;i<4;i++){

	shuru(x+bu[i][0],y+bu[i][1],o); 
 }		
}
else return;

}//

int rux=0,ruy=999,chux=999,chuy=999;int p1,p2,p3,p4;
void pan(int x,int y,int o,int p1,int p2,int p3,int p4 ){
if(a[x][y]0&&x>=1000&&x<0&&y>=1000&&y<0){
return;
}
a[x][y]=0;
//上不通 p1 下不通 p2 左不通 p3 右不通 p4
// 判断3种情况 上下不通 上左不通 上右不通
if(x
0) p3=1;
if(y0) p2=1;
if(x
999) p4=1;
if(y999) p1=1;
if(p1
1&&p21){
cout<<“Bill enters at (”<<rux <<", “<<ruy <<”) and leaves at ("<<chux <<", “<<chuy<<”).";
exit(0);
}
if(p1
1&&p31){//更新值
ruy=max(ruy,y);
}
if(p1
1&&p4==1){
chuy=max(chuy,y);
}
for(int i=0;i<4;i++){
pan(x+bu[i][0],y+bu[i][1],o,p1,p2,p3,p4);
}

}

int main(){
cin>>n;
int s[10];int x,y,o;
for(int i=0;i<n;i++){//shuru 蛇

	cin>>x>>y>>o;
	x-=1;y-=1;
	ji[i][0]=x;ji[i][1]=y;
	jx=x,jy=y;
	shuru(x,y,o);
	cout<<nj;
}
for(int i=0;i<n;i++){
 	pan(ji[i][0],ji[i][1],o,0,0,0,0);
}
	cout<<"Bill enters at ("<<rux <<", "<<ruy <<") and leaves at ("<<chux <<", "<<chuy<<").";

}

但是很遗憾,因为递归 调用空间太大了 不得行

我哭了,写这么就,不行,使用说算法设计很重要啊,写之前一定要考虑算法的可行性

标记明显不可能,那么就不标记直接在寻路时判断 但是不标记,不好判在这里插入图片描述断。。。

可是,时间太晚了,我要睡觉了。。。 思路大概有了

如果要代码可以去参考https://blog.csdn.net/icefox_zhx/article/details/77837085

我太菜了 不行了 8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值