06-图2 Saving James Bond - Easy Version

来源:互联网 发布:qq防撤回软件 编辑:程序博客网 时间:2024/05/16 17:12
#include <stdio.h>#include <stdlib.h>#define Island_Diameter 15int Visited[105];int FirstJump(int *a, int i, int D);int IsSafe(int *a, int i, int D);int Jump(int *a, int i, int j, int D);int DFS(int *a, int i, int N, int D);int main(int argc, char const *argv[]){// freopen("test.txt", "r", stdin);int N, D;scanf("%d %d", &N, &D);int croco[2*N];for (int i = 0; i < N; i++){scanf("%d %d", &croco[2*i], &croco[2*i+1]);Visited[i] = 0;}int answer = 0;for (int i = 0; i < N; i++){if (Visited[i] == 0 && FirstJump(croco, i, D)){answer = DFS(croco, i, N, D);if (answer)break;}}if (answer)printf("Yes\n");elseprintf("No\n");return 0;}int FirstJump(int *a, int i, int D){if ((a[2*i]*a[2*i] + a[2*i+1]*a[2*i+1])*4 <= (2*D+Island_Diameter) * (2*D+Island_Diameter))//扩大两倍以免出现浮点数return 1;elsereturn 0;}int IsSafe(int *a, int i, int D){if ( (a[2*i] + D >= 50)||(a[2*i] - D <= -50)||(a[2*i+1] + D >= 50)||(a[2*i+1] - D <= -50) )return 1;elsereturn 0;}int Jump(int *a, int i, int j, int D){if ( ( (a[2*i]-a[2*j])*(a[2*i]-a[2*j]) + (a[2*i+1]-a[2*j+1])*(a[2*i+1]-a[2*j+1]) ) <= D*D )return 1;elsereturn 0;}int DFS(int *a, int i, int N, int D){Visited[i] = 1;int answer = 0;if (IsSafe(a, i, D))answer = 1;else{for (int j = 0; j < N; j++){if (Visited[j] == 0 && Jump(a, i, j, D)){answer = DFS(a, j, N, D);if (answer)break;}}}return answer;}

0 0