刚做了数据结构拯救007的题,由于对编程处于陌生小白阶段,题目提交后总是显示段错误,心理很迷惑,想寻求一下帮助。(这个代码也是我看这个网站上的大佬写的思路,自己理解做的)
#include<stdio.h>
#include <string.h>
struct node{
int x;
int y;
}s[102];//建立一个结构
int Visit[102];
int flag=0;
int border(int i,int D){
if((s[i].x)<=(D-50)||(s[i].x)>=(50-D)||(s[i].y)<=(D-50)||(s[i].y)>=(50-D))
return 1;
else
return 0;
}//判断能否一次性跳过
int distangue(int i,int j,int D){
if((s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y)<=D*D)
return 1;
else
return 0;
}//判断两点距离是否小于D
int Fist(int D,int i){
if(s[i].x*s[i].x+s[i].y*s[i].y<=(D+7.5)*(D+7.5))
return 1;
else
return 0;
}//判断能否第一次逃脱
int CanEscape(int t,int D,int N){
Visit[t]=1;
if(border(t,D)==1)
flag=1;
int i;
for(i=0;i<N;i++){
if(!Visit[i]&&distangue(t,i,D))
flag=CanEscape(t,D,N);
}
return flag;
}//判断能否逃脱
//mian函数
int main()
{
int D;
int N;
scanf("%d%d",&D,&N);
int i;
for(i=0;i<N;i++)
{
scanf("%d%d",&(s[i].x),&(s[i].y));
}
memset(Visit,0,sizeof(Visit));
if(D>=42.5)
printf("Yes");
else{
for(i=0;i<N;i++){
if(!Visit[i]&&Fist(D,i))
CanEscape(i,D,N);
}
}
if(flag==1)
printf("Yes");
else
printf("No");
return 0;
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。