运行之后在scanf那里显示段错误了。
不知道是不是分配内存那里错了?
数组那里写麻烦了已经晕了不知道这样用数组对不对
//Save 007----DFS:
//007位于坐标轴上(0,0)处的孤岛,现在他要踩着鳄鱼群到达大陆。已知他的最大跳跃为3m,鳄鱼数、鳄鱼群中每只鳄鱼的坐标(假设均为整数)和
//是否能经由这只鳄鱼到达岸边由外界输入。最后输出能否到达岸边。
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MaxJump 3
//每只鳄鱼
struct Alligator{
int x; //坐标
int y;
bool AccessToBank; //能否由这只鳄鱼到达岸边
bool IfVisited;
};
typedef struct Alligator *PtrToAlli;
bool Save007(int x,int y,int AlliNum,PtrToAlli *AlliFlock); //DFS
int distance(int x1,int y1,int x2,int y2);
int main()
{
int AlliNum; //鳄鱼数
printf("please enter the number:");
scanf("%d",&AlliNum);
PtrToAlli *AlliFlock = malloc(sizeof(struct Alligator)*AlliNum); //鳄鱼群
printf("please enter the coordinate for each alligator(format:X Y IfAccessToBank)\n");
for (int i = 0;i < AlliNum;i++)
{
scanf("%d %d %d",&AlliFlock[i]->x,&AlliFlock[i]->y,&AlliFlock[i]->AccessToBank);
AlliFlock[i]->IfVisited = false;
}
if (Save007(0,0,AlliNum,AlliFlock))
printf("Yes");
else
printf("No");
return 0;
}
bool Save007(int x,int y,int AlliNum,PtrToAlli *AlliFlock){
for (int i = 0;i < AlliNum;i++)
{
if (AlliFlock[i]->AccessToBank)
return true;
else if ((distance(x,y,AlliFlock[i]->x,AlliFlock[i]->y) <= MaxJump) && AlliFlock[i]->IfVisited == false)
AlliFlock[i]->IfVisited = true;
return Save007(AlliFlock[i]->x,AlliFlock[i]->y,AlliNum,AlliFlock);
}
return false;
}
int distance(int x1,int y1,int x2,int y2){
return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
}