文章来自数据结构课堂,为著名的拯救007问题
题目描述:就是在一个100X100
的矩形框中判断身在岛屿中央的人能否依次跳到岸上,这是一个easy版本,示意图如图所示:
编译调试时遇到了弱智问题,由于使用的是WSL中的vim
编辑器,使用Gcc
来编辑调试,结果人家提示说是
/tmp/cc0ONryr.o: In function `FirstJump':
LTJ.c:(.text+0x14a): undefined reference to `sqrt'
/tmp/cc0ONryr.o: In function `ToJump':
LTJ.c:(.text+0x1cd): undefined reference to `pow'
LTJ.c:(.text+0x215): undefined reference to `pow'
LTJ.c:(.text+0x21f): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
此时只需要在使用gcc时加上-lm
即可,如gcc LTJ.c -o test -lm
主程序
#include<stdio.h>
#include<math.h>
#include<stdbool.h> //此头文件将C99制定的`_Bool`类型起了一个叫bool的别名,实现和c++的兼容
#include<stdlib.h>
typedef int crocodile;
typedef struct position{
crocodile x;
crocodile y;
}Position;
#define radius (15.0/2)
Position *croco;
int *visit;
int N,D;
void Init();
bool FirstJump(int ps);
bool ToJump(int v1 , int v2);
bool IsSave(int ps);
bool DFS(int ps);
int main(void){
int i;
Init();
bool IsSave = false;
for(i=0;i<N;i++){
if(visit[i]==0&&FirstJump(i))
IsSave = DFS(i);
if(IsSave)
break;
}
if(IsSave)
printf("Yes\n");
else
printf("No\n");
return 0;
}
调用函数
void Init(){//初始化
int i;
scanf("%d %d",&N,&D);
visit = (int *)malloc(N*sizeof(int));
croco = (Position *)malloc(N*sizeof(Position));
for(i=0;i<N;i++){
visit[i] = 0;
scanf("%d %d",&croco[i].x,&croco[i].y);
}
}
bool FirstJump(int ps){
if(sqrt(croco[ps].x*croco[ps].x+croco[ps].y*croco[ps].y)<=radius+D)
return true;
return false;
}
bool ToJump(int v1 , int v2){
return sqrt(pow((croco[v1].x-croco[v2].x),2)+pow((croco[v1].y-croco[v2].y),2))<=D;
}
bool IsSave(int ps){
if(abs(croco[ps].x)+D>=50||abs(croco[ps].y)+D>=50)
return true;
return false;
}
bool DFS(int ps)
{
int i;
if(IsSave(ps))
return true;
visit[ps]=1;
for(i=0;i<N;i++){
if(visit[i]==0&&ToJump(ps,i))
if(DFS(i))
return true;
}
return false;
}