运行之后在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);
}
scanf("%d %d %d",&(AlliFlock[i]->x),&(AlliFlock[i]->y),&(AlliFlock[i]->AccessToBank));
//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 = (PtrToAlli )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");
system("pause");
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);
}
typedef struct Alligator *PtrToAlli;你把结构体别名成了指针类型,后面又用了指针,变成指针的指针。我现在把后面的指针使用取消了