06-图2 Saving James Bond

来源:互联网 发布:c语言函数调用原理 编辑:程序博客网 时间:2024/06/04 18:26

#include<iostream>  #include<cmath> //abs和pow#define MAXSIZE 101#define MINLEN 42.5 //湖中岛屿为半径=7.5的圆盘 using namespace std;   struct Vertex{int x;int y;bool flag;//是否访问过 };Vertex vertex[MAXSIZE];//全局变量,面得DFS每次都重新传入数组 int n,m;//全局变量,面得DFS每次都重新传入n,m bool DFS(int cur){vertex[cur].flag=true;//标记为访问过  bool answer=false;if(50-abs(vertex[cur].x)<m || 50-abs(vertex[cur].y)<m)  answer=true;else{for(int i=0;i<n;i++){if( vertex[i].flag==false && pow((vertex[cur].x-vertex[i].x),2)+pow((vertex[cur].y-vertex[i].y),2)<=pow(m,2) ){//G.s[i][j]==1必须ij之间有路,flag[j]==0并且j未被访问过//cout<<"i="<<i<<" ";                         answer=DFS(i);                        //cout<<"answer="<<answer<<endl;if(answer)  break;} }}return answer;     }int main(){  //freopen("input.txt","r",stdin);cin>>n>>m;if(m>MINLEN){cout<<"Yes"<<endl;return 0;}   for(int i=0;i<n;i++){cin>>vertex[i].x>>vertex[i].y;vertex[i].flag=false;}bool answer=false;for(int i=0;i<n;i++){if( vertex[i].flag==false && pow((vertex[i].x),2)+pow((vertex[i].y),2)<=pow((m+7.5),2) ){//第一跳特殊处理 answer=DFS(i);if(answer) break;}}if(answer)  cout<<"Yes"<<endl;else   cout<<"No"<<endl;      return 0;  }