随笔 - 62  文章 - 96  trackbacks - 0
<2006年10月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(7)

随笔分类(66)

随笔档案(62)

文章分类(31)

文章档案(32)

友情链接

最新随笔

积分与排名

  • 积分 - 231363
  • 排名 - 106

最新评论

阅读排行榜

评论排行榜

今天在PKU上做了我第一题广度优先搜索题:
Problem Id:2627  User Id:beyonlin_SCUT
Memory:64K  Time:575MS
Language:C++  Result:Accepted
个人认为算法复杂度应该为O(n^2)或更小。不知是不是这样。
http://acm.pku.edu.cn/JudgeOnline/problem?id=2627

Gopher and hawks
Time Limit:1000MS  Memory Limit:65536K
Total Submit:900 Accepted:328

Description
A gopher sits in a hole located at (xs, ys) and wants to get to a hole located at (xt, yt). The gopher can run at a constant speed of v m/sec. However, if the gopher is outside of a hole for more than a m minutes he will become a supper to hawks flying over the holes. Can the gopher make it?

Input
The first line of input contains two positive integer numbers: v -- gopher's speed in meters per second and m -- the time after which the gopher becomes prey to hawks if he stays outside a hole. The second line of input contains two floating point numbers: the (xs,ys) coordinates of the gopher starting hole. The third line contains the (xt, yt) coordinates of the target hole. Each Subsequent line of input contains two floating point numbers: the (x,y) coordinates of a gopher hole. All distances are in metres, to the nearest mm.

Output
If the gopher can make it to the target hole, the output line should read "Yes, visiting n other holes.", where n is the minimal number of intermediate holes the gopher has to visit. If the gopher cannot make it the output line should read "No." There are not more than 1000 gopher holes and all coordinates are between -10000 and +10000.

Sample Input

3 1
0.000 0.000
500.000 0.000
179.000 0.000
358.000 0.000

Sample Output

Yes, visiting 2 other holes.

Hint
Sample input 2
5 1
0.000 0.000
0.000 550.000
179.000 0.000
0.000 301.000

Output for sample input 2
No.


我的程序:

#include<cstdio> #include<cmath> #include<queue> using namespace std; struct node { int point; int step; }; double x[1100],y[1100]; bool flag[1100]={false}; int main() { int i,v,t; scanf("%d%d",&v,&t); t*=60; double beginX,beginY,endX,endY; scanf("%lf%lf%lf%lf",&beginX,&beginY,&endX,&endY); int n=1; while(scanf("%lf%lf",x+n,y+n)!=EOF) n++; x[0]=beginX; y[0]=beginY; x[n]=endX; y[n]=endY; node n1;//队列初始化 n1.point=0; n1.step=0; queue<node> que; que.push(n1); int steps=0; while(true) { if(que.empty()) break; node tmp=que.front(); que.pop();//出队列 for(i=1;i<=n;i++) { if(!flag[i])//标志是否进过队列 { double time=sqrt(pow(x[i]-x[tmp.point],2.0)+pow(y[i]-y[tmp.point],2.0))/v; if(time<t) { if(i==n) { steps=tmp.step; goto next; } else { node in; in.point=i; in.step=tmp.step+1; que.push(in);//进队列 flag[i]=true; } } } } } next: if(steps!=0) printf("Yes, visiting %d other holes.\n",steps); else printf("No.\n"); return 0; }

posted on 2006-08-24 10:25 beyonlin 阅读(560) 评论(0)  编辑 收藏 引用 所属分类: acm之路

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理