程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1548 A strange lift(優先隊列)

hdu 1548 A strange lift(優先隊列)

編輯:C++入門知識

簡單的優先隊列,原來沒學覺得還是不好做(貌似原來題目都沒咋搞懂!!!)

今早遇見果斷拿下!!!

 


清早水一道吧!(再過兩天想回家看看,集訓一個多月了,咋說呢!說累不累,就是不想了!!!)

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

 


(廢話:優先隊列就是好用啊!優先!!!在這個世界大多數問題都是最值問題,要麼最差,要麼最好,呵呵,而優先隊列無疑是不錯的哦!嘿嘿·······)

 


#include<stdio.h>

#include<string.h>
#include<queue>
using namespace std;


int start,end,n;
int a[500],visit[500];
struct node
{
int x,time;
friend bool operator<(node a,node b)
{
return a.time>b.time;
}
};


int dfs()
{
priority_queue<node>q;
node cur,next;
cur.x=start;
cur.time=0;
q.push(cur);
visit[start]=1;
while(!q.empty())
{
next=q.top();
q.pop();
if(next.x==end)
return next.time;
if(next.x+a[next.x]<=n&&visit[next.x+a[next.x]]==0)
{
cur.time=next.time+1;
cur.x=next.x+a[next.x];
q.push(cur);
visit[next.x+a[next.x]]=1;
}
if(next.x-a[next.x]>=1&&visit[next.x-a[next.x]]==0)
{
cur.time=next.time+1;
cur.x=next.x-a[next.x];
q.push(cur);
visit[next.x-a[next.x]]=1;
}
}
return -1;
}


int main()
{
int i,ans;
while(scanf("%d",&n),n)
{
memset(visit,0,sizeof(visit));
scanf("%d%d",&start,&end);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
ans=dfs();
printf("%d\n",ans);
}
return 0;

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved