青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

題目地址:
         http://acm.hdu.edu.cn/showproblem.php?pid=1548
題目描述:
A strange lift
Time Limit: 
2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 
2641    Accepted Submission(s): 944


Problem Description
There 
is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two buttons: up and down.When you at floor i,if you press the button "UP" , you will go up Ki floor,i.e,you will go to the i+Ki th floor,as the same, if you press the button "DOWN" , you will go down Ki floor,i.e,you will go to the i-Ki th floor. Of course, the lift can't go up high than N,and can't go down lower than 1. For example, there is a buliding with 5 floors, and k1 = 3, k2 = 3,k3 = 1,k4 = 2, k5 = 5.Begining from the 1 st floor,you can press the button "UP", and you'll go up to the 4 th floor,and if you press the button "DOWN", the lift can'do it, because it can't go down to the -2 th floor,as you know ,the -2 th floor isn't exist.
Here comes the problem: when you 
is on floor A,and you want to go to floor B,how many times at least he havt to press the button "UP" or "DOWN"?

 

Input
The input consists of several test cases.,Each test 
case contains two lines.
The first line contains three integers N ,A,B( 
1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,.kn.
A single 
0 indicate the end of the input.
 

Output
For each 
case of the input output a interger, the least times you have to press the button when you on floor A,and you want to go to floor B.If you can't reach floor B,printf "-1".
 

Sample Input
5 1 5
3 3 1 2 5
0
 

Sample Output
3

題目分析:
        這題又是一個標準的  Dijkstra 算法的題目 ( 最短路 ).  要說難度嗎?  對我而言吧, 就是 圖的生成.
剛開始做的時候自己想復雜了, 以為從不同的樓層開始, 就有不同的走法, 所以開始的時候寫循環沒寫對,
就寫成了遞歸.   結果很杯具的 STACK_OVERFLOW........   在 AMB 神牛的指點發現, 原來是自己想復雜了,
只需要計算出每一個樓層的 上樓 和 下樓就可以了, 當然, 要注意是否越界.  圖生成后, 當然就是 DIJKSTRA了.

閑來無事, 又復制一遍 :
            Dijkstra算法的基本思路是:

         假設每個點都有一對標號 (dj, pj),其中dj是從起源點s到點j的最短路徑的長度 (從頂點到其本身的最短路徑是零路(沒有弧的路),其長度等于零);

pj則是從s到j的最短路徑中j點的前一點。求解從起源點s到點j的最短路徑算法的基本過程如下:

  1) 初始化。起源點設置為:① ds=0, ps為空;② 所有其他點: di=∞, pi=?;③ 標記起源點s,記k=s,其他所有點設為未標記的。

  2) 檢驗從所有已標記的點k到其直接連接的未標記的點j的距離,并設置:


dj=min[dj, dk+lkj]


式中,lkj是從點k到j的直接連接距離。

  3) 選取下一個點。從所有未標記的結點中,選取dj 中最小的一個i:


di=min[dj, 所有未標記的點j]


點i就被選為最短路徑中的一點,并設為已標記的。

  4) 找到點i的前一點。從已標記的點中找到直接連接到點i的點j*,作為前一點,設置:i=j*

  5) 標記點i。如果所有點已標記,則算法完全推出,否則,記k=i,轉到2) 再繼續。



代碼如下:
#include <iostream>
using namespace std;
const int MAX = 200;
const int INF = 0x7FFFFFF;
int N,A,B;
int g[MAX+1][MAX+1];
int hash[MAX+1];
int path[MAX+1];
int K[MAX+1];
int Dijkstra ( int beg , int end )
{
    path[beg] 
= 0;
    hash[beg] 
= false;
    
while ( beg != end )
    {
            
int m = INF, temp;
            
for ( int i = 1; i <= N; ++ i )
            {
                  
if ( g[beg][i] != INF )
                       path[i] 
= min ( path[i], path[beg] + g[beg][i] );
                  
if ( m > path[i] && hash[i] )
                  {
                       m 
= path[i];
                       temp 
= i; 
                  }           
            }
            beg 
= temp;
            
if ( m == INF )
                 
break;
            hash[beg] 
= false;
    }
    
if ( path[end] == INF )
         
return -1;
    
return path[end]; 
}

int main ()
{
    
while ( scanf ( "%d%d%d"&N, &A, &B ) , N )
    {
            
for ( int i = 0; i <= MAX; ++ i )
            {
                  hash[i] 
= true;
                  path[i] 
= INF;
                  
for ( int j = 0; j <= MAX; ++ j )
                  {
                        g[i][j] 
= INF;
                  } 
            }
            
for ( int i = 1; i <= N; ++ i )
            {
                  scanf ( 
"%d",&K[i] );
            } 
            
for ( int i = 1; i <= N; ++ i )
            {
                  
if ( i + K[i] <= N )
                       g[ i ][ i 
+ K[i] ] = 1
                  
if ( i - K[i] >= 1 )
                       g[ i ][ i 
- K[i] ] = 1
            }
            cout 
<< Dijkstra ( A, B ) << endl;
    }
    
return 0
}


SO 代碼:
#include <iostream>
using namespace std;
const int MAX = 200;
const int INF = 0x7FFFFFF;
bool UP = true;
bool DOWN = false;
int N,A,B;
int g[MAX+1][MAX+1];
int hash[MAX+1];
int path[MAX+1];
int K[MAX+1];

int Dijkstra ( int beg , int end )
{
    path[beg] 
= 0;
    hash[beg] 
= false;
    
while ( beg != end )
    {
            
int m = INF, temp;
            
for ( int i = 1; i <= N; ++ i )
            {
                  
if ( g[beg][i] != INF )
                       path[i] 
= min ( path[i], path[beg] + g[beg][i] );
                  
if ( m > path[i] && hash[i] )
                  {
                       m 
= path[i];
                       temp 
= i; 
                  }           
            }
            beg 
= temp;
            
if ( m == INF )
                 
break;
            hash[beg] 
= false;
    }
    
if ( path[end] == INF )
         
return -1;
    
return path[end]; 
}

bool setGraph ( int n, bool flag )
{
     
if ( flag ) 
     {
          
if ( n + K[n] <= N )
          {
               g[ n ][ n 
+ K[n] ] = 1;
               setGraph ( n 
+ K[n], UP );
               setGraph ( n 
+ K[n], DOWN );
          }  
     }
     
else
     {
          
if ( n - K[n] >= 1 )
          {
               g[ n  ][ n 
- K[n] ] = 1;
               setGraph ( n 
- K[n], UP );
               setGraph ( n 
- K[n], DOWN ); 
          } 
     }
     
return true;
}
int main ()
{
    
while ( scanf ( "%d%d%d"&N, &A, &B ) , N )
    {
            
for ( int i = 0; i <= MAX; ++ i )
            {
                  hash[i] 
= true;
                  path[i] 
= INF;
                  
for ( int j = 0; j <= MAX; ++ j )
                  {
                        g[i][j] 
= INF;
                  } 
            }
            
for ( int i = 1; i <= N; ++ i )
            {
                  scanf ( 
"%d",&K[i] );
            } 
            
for ( int i = 1; i <= N; ++ i )
            {
                  setGraph ( i, UP );
                  setGraph ( i, DOWN ); 
            }
            cout 
<< Dijkstra ( A, B ) << endl;
    }
    
return 0
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区在线免费播放| 午夜久久99| 欧美mv日韩mv国产网站app| 午夜久久久久久久久久一区二区| 国产精品家教| 午夜精品视频在线观看| 亚洲综合色网站| 国产日韩在线不卡| 久久精品国产免费观看| 久久久免费av| 99伊人成综合| 亚洲综合色婷婷| 精品51国产黑色丝袜高跟鞋| 亚洲国产va精品久久久不卡综合| 欧美久久电影| 午夜一区不卡| 看欧美日韩国产| 亚洲一区图片| 久久精精品视频| 99精品欧美一区二区三区综合在线 | 亚洲摸下面视频| 精品91免费| 亚洲日本成人在线观看| 国产精品每日更新| 美日韩丰满少妇在线观看| 欧美激情一区二区三区四区| 亚洲影院一区| 久热精品在线| 午夜视频一区在线观看| 久久亚洲综合色一区二区三区| 99国内精品久久| 性色av一区二区三区红粉影视| 亚洲日本va在线观看| 亚洲视频在线视频| 亚洲第一黄网| 亚洲综合激情| 国产精品99久久久久久www| 欧美伊人久久| 亚洲免费影视| 欧美日韩高清区| 麻豆精品视频在线| 国产精品素人视频| 亚洲精品少妇30p| 激情六月婷婷综合| 亚洲欧美日韩人成在线播放| 日韩视频免费看| 久久美女性网| 久久成人资源| 国产精品久久久久aaaa| 亚洲国产欧美久久| 影音先锋日韩资源| 先锋影音久久| 欧美一区二区日韩| 欧美日韩在线亚洲一区蜜芽| 欧美黄在线观看| 在线观看亚洲视频| 欧美有码在线视频| 久久精品天堂| 国产拍揄自揄精品视频麻豆| 亚洲视频在线观看免费| 一区二区三区视频在线播放| 欧美成年人视频| 奶水喷射视频一区| 亚洲第一综合天堂另类专| 欧美一区二区三区四区在线观看地址| 国产精品99久久久久久久久久久久| 蜜月aⅴ免费一区二区三区 | 亚洲欧美国产精品桃花| 欧美日韩1区| 亚洲精品综合精品自拍| 99亚洲一区二区| 欧美日韩精品中文字幕| 99精品99| 午夜综合激情| 国内视频一区| 久久久另类综合| 欧美大片免费久久精品三p| 亚洲第一搞黄网站| 欧美v国产在线一区二区三区| 欧美大片一区二区三区| 亚洲精品社区| 欧美午夜电影一区| 亚洲综合国产精品| 久久中文在线| 亚洲精选视频免费看| 欧美日韩在线不卡一区| 亚洲天堂久久| 久久阴道视频| 9色精品在线| 欧美系列精品| 久久久久高清| 亚洲国产一区视频| 午夜在线视频观看日韩17c| 国内一区二区三区在线视频| 久热精品视频| 亚洲图片欧洲图片av| 久久久国产精品一区二区中文| 在线不卡欧美| 欧美日韩国内| 久久精品综合网| 日韩一区二区精品视频| 欧美在线观看你懂的| 亚洲国产美女| 国产麻豆成人精品| 女主播福利一区| 亚洲一区二区三区乱码aⅴ| 久久综合婷婷| 亚洲免费在线视频一区 二区| 国产亚洲免费的视频看| 欧美日韩国产成人高清视频| 欧美亚洲一区二区三区| 亚洲精美视频| 久久三级福利| 亚洲欧美电影院| 亚洲国产一区二区三区在线播| 国产精品精品视频| 你懂的视频一区二区| 亚洲资源av| 亚洲青涩在线| 欧美777四色影视在线| 亚洲综合视频在线| 亚洲精品在线一区二区| 狠狠色狠狠色综合日日tαg| 欧美日韩在线亚洲一区蜜芽| 免费试看一区| 久久久国产精品一区| 亚洲欧美日韩国产| 一本久道久久久| 91久久精品视频| 欧美成人三级在线| 久久中文字幕一区二区三区| 欧美一区91| 亚洲综合99| 亚洲一级二级在线| 一区二区免费在线观看| 亚洲电影在线免费观看| 激情欧美一区二区三区在线观看| 国产精品久久久久久久9999| 欧美另类亚洲| 欧美不卡在线| 女人色偷偷aa久久天堂| 久久夜色精品国产欧美乱极品| 欧美一区激情| 欧美中文字幕久久| 先锋影院在线亚洲| 欧美一区影院| 久久久精品视频成人| 久久久精品久久久久| 欧美专区在线观看一区| 欧美一级黄色录像| 欧美中文字幕视频在线观看| 欧美一区视频| 久久噜噜噜精品国产亚洲综合 | 亚洲精品影院在线观看| 亚洲第一在线| 亚洲啪啪91| 在线视频中文亚洲| 亚洲女优在线| 久久九九免费视频| 欧美成ee人免费视频| 欧美日韩色一区| 国产精品乱码一区二三区小蝌蚪| 国产精品久久99| 国产欧美精品日韩| 精品1区2区3区4区| 99精品欧美一区二区三区综合在线| 亚洲精品自在久久| 亚洲欧美国产不卡| 久久久蜜臀国产一区二区| 欧美77777| 99精品欧美一区二区三区综合在线| 99热精品在线观看| 欧美一区二区成人6969| 久久婷婷人人澡人人喊人人爽 | 亚洲精品国产精品乱码不99| 亚洲国产合集| 亚洲一区二区三区激情| 久久婷婷久久| 国产精品都在这里| 经典三级久久| 亚洲免费视频中文字幕| 久久综合久久综合这里只有精品| 欧美激情精品久久久六区热门| 99国内精品| 久久人体大胆视频| 欧美日韩综合另类| 亚洲成在人线av| 午夜一级久久| 亚洲三级电影全部在线观看高清| 亚洲一区二区免费视频| 麻豆国产精品777777在线| 国产精品国产精品国产专区不蜜| 韩国av一区| 亚洲欧美日韩精品| 亚洲高清久久久| 欧美在线视频网站| 国产精品成人v| 91久久精品日日躁夜夜躁欧美| 欧美一区高清| 日韩写真视频在线观看|