Saving James Bond - Easy Version

文章来自数据结构课堂,为著名的拯救007问题

题目描述:就是在一个100X100的矩形框中判断身在岛屿中央的人能否依次跳到岸上,这是一个easy版本,示意图如图所示:

程序
BFS
DFS

示意图

编译调试时遇到了弱智问题,由于使用的是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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值