Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

看来stl里面的queue很实用的!学了一下就用了一下果然很有效!附代码!你绝对不容错过!

Posted by chenxuan123456789 at 2012-11-04 10:32:55 on Problem 3278
#include <iostream>
#include <queue>
#include <stdio.h>
#include <string.h>
using namespace std;
struct Node
{
       int point;
       int time;
};
class poj3278
{
      public:
             int visited[100010];
             int s,e;
             int  result();
};
int poj3278::result()
{
     if(s==e)
     return 0;
     memset(visited,0,sizeof(visited));
     visited[s]=1;
     Node t;
     t.point=s;
	 t.time=0;
	 queue<Node> p;
	 p.push(t);
	 while(!p.empty())
	 {
                     Node temp1,temp2;
                     temp1=p.front();
                     p.pop();
                     if(temp1.point-1>=0&&temp1.point-1<=100000&&!visited[temp1.point-1])
                     {
                                                                visited[temp1.point-1]=1;
                                                                temp2.point=temp1.point-1;
                                                                temp2.time=temp1.time+1;
                                                                if(temp2.point==e)
                                                                return temp2.time;
                                                                p.push(temp2);
                     }
                     if(temp1.point+1>=0&&temp1.point+1<=100000&&!visited[temp1.point+1])
                     {
                                                                visited[temp1.point+1]=1;                         
                                                                temp2.point=temp1.point+1;
                                                                temp2.time=temp1.time+1;
                                                                if(temp2.point==e)
                                                                return temp2.time;
                                                                p.push(temp2);
                     }
                     if(2*temp1.point>=0&&temp1.point*2<=100000&&!visited[temp1.point*2])
                     {
                                                                visited[temp1.point*2]=1;                        
                                                                temp2.point=2*temp1.point;
                                                                temp2.time=temp1.time+1;
                                                                if(temp2.point==e)
                                                                return temp2.time;
                                                                p.push(temp2);
                     }
  }
}
int main()
{
    poj3278 t;
    while(scanf("%d %d",&t.s,&t.e)!=EOF)
    {
                    int ans=t.result();
                    cout<<ans<<endl;
    }
	return 1;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator