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

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国产精品99久久久久久粉嫩| 99精品热视频| 久久久国产一区二区三区| 国产九区一区在线| 欧美怡红院视频一区二区三区| 亚洲尤物精选| 国内精品模特av私拍在线观看| 老司机午夜精品视频| 久久综合色播五月| 一区二区不卡在线视频 午夜欧美不卡' | 亚洲国产成人久久综合| 久久青草久久| 一本色道久久88亚洲综合88| 亚洲视频免费观看| 国产专区一区| 亚洲区一区二| 国产婷婷色综合av蜜臀av| 欧美电影免费观看| 欧美午夜不卡| 久久婷婷av| 欧美三级视频| 蜜桃久久精品一区二区| 欧美日韩日韩| 六十路精品视频| 欧美午夜片在线免费观看| 老巨人导航500精品| 欧美日韩一区二区在线视频| 久久精品欧洲| 欧美日韩三级视频| 美女主播精品视频一二三四| 欧美日韩一区二区三区免费看| 久久久噜噜噜久久| 欧美日韩一区二区三区在线看 | 久久精品日韩欧美| 欧美激情自拍| 可以免费看不卡的av网站| 欧美视频三区在线播放| 欧美成人高清| 国产一区二区三区免费观看| 亚洲精品国产精品国产自| 黄色精品一区| 亚洲一区二区高清视频| 日韩视频一区| 老司机午夜精品视频| 久久福利视频导航| 国产精品v欧美精品v日本精品动漫| 美国成人毛片| 黄色成人av网| 先锋影音国产精品| 亚洲欧美文学| 欧美午夜电影完整版| 亚洲黄色一区二区三区| 在线免费高清一区二区三区| 午夜欧美大尺度福利影院在线看 | 亚洲二区在线视频| 欧美主播一区二区三区美女 久久精品人 | 在线免费观看一区二区三区| 亚洲午夜电影在线观看| 亚洲午夜电影网| 欧美精选午夜久久久乱码6080| 久久久无码精品亚洲日韩按摩| 国产精品亚洲一区| 亚洲一级特黄| 性欧美videos另类喷潮| 国产精品视频精品| 亚洲欧美日韩综合aⅴ视频| 午夜国产精品视频免费体验区| 欧美日在线观看| 这里只有精品在线播放| 亚洲欧美日本日韩| 国产精品久久久久久久7电影| 亚洲午夜电影| 久久国产高清| 在线观看视频一区二区欧美日韩| 久久久久久久网| 欧美粗暴jizz性欧美20| 亚洲人成网站777色婷婷| 欧美国产日韩视频| 一区二区不卡在线视频 午夜欧美不卡'| 99riav久久精品riav| 国产精品国产三级国产专区53 | 亚洲欧美日韩天堂一区二区| 性色一区二区| 狠狠色综合网站久久久久久久| 久久全球大尺度高清视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲黄色av| 欧美天天在线| 欧美在线观看视频一区二区| 欧美sm视频| 国产精品99久久久久久久vr| 国产午夜精品在线| 免费不卡在线观看| 在线亚洲一区| 美国成人直播| 亚洲一区国产视频| 激情久久中文字幕| 欧美日韩国内| 久久国产精品99国产| 亚洲国产精品va在线看黑人 | 国产欧美日本在线| 美女91精品| 亚洲欧美国内爽妇网| 欧美激情免费观看| 午夜国产精品影院在线观看| 伊人久久综合97精品| 欧美日韩综合精品| 久久一区中文字幕| 亚洲免费综合| 日韩亚洲视频| 欧美高清在线一区| 欧美中文字幕| 亚洲一区二区在线| 亚洲精品1区2区| 国产亚洲一本大道中文在线| 欧美日本高清| 麻豆freexxxx性91精品| 亚洲欧美日韩一区在线观看| 91久久精品视频| 免费日韩一区二区| 久久国产手机看片| 亚洲女人小视频在线观看| 亚洲欧洲一二三| 在线播放一区| 国产在线拍揄自揄视频不卡99| 欧美视频在线观看一区| 欧美风情在线观看| 老司机午夜免费精品视频| 欧美一区二区在线播放| 亚洲在线网站| 亚洲一二三区视频在线观看| 日韩一级视频免费观看在线| 亚洲国产精品久久久久婷婷老年 | 欧美r片在线| 麻豆精品精品国产自在97香蕉| 性欧美暴力猛交另类hd| 亚洲欧美日韩高清| 亚洲一区二区少妇| 亚洲香蕉网站| 亚洲一区二区黄色| 亚洲影院一区| 午夜精品一区二区三区四区| 一区二区日韩| 亚洲专区国产精品| 午夜激情一区| 欧美在线一二三区| 久久精品道一区二区三区| 久久精品日产第一区二区| 久久精品国产99国产精品| 久久久久久久久久久一区| 久久九九精品99国产精品| 久久免费偷拍视频| 欧美不卡激情三级在线观看| 亚洲大片一区二区三区| 亚洲国产精品久久人人爱蜜臀 | 久久夜色撩人精品| 免费欧美电影| 亚洲精品1234| 99国产一区| 香蕉久久精品日日躁夜夜躁| 久久精品2019中文字幕| 久久一区激情| 欧美日韩精品一区二区天天拍小说| 欧美区二区三区| 国产精品视频精品视频| 国内精品久久久久久久影视蜜臀| 一区二区三区中文在线观看| 亚洲国产精品嫩草影院| 在线亚洲高清视频| 欧美在线电影| 亚洲国产精品免费| 亚洲视频二区| 老司机午夜免费精品视频| 欧美日韩三区| 狠狠色狠色综合曰曰| 一本大道av伊人久久综合| 性做久久久久久| 欧美激情亚洲精品| 亚洲午夜av电影| 免费观看日韩| 国产视频亚洲精品| 日韩小视频在线观看| 久久激情网站| 日韩亚洲欧美成人一区| 欧美在线精品一区| 欧美日韩国产999| 一区精品在线| 亚洲欧美不卡| 最近看过的日韩成人| 欧美亚洲综合久久| 欧美日韩国产综合视频在线| 伊甸园精品99久久久久久| 亚洲天堂成人在线观看| 猛干欧美女孩| 小黄鸭视频精品导航| 欧美日韩直播| 99国产精品视频免费观看| 久久美女艺术照精彩视频福利播放| 日韩视频永久免费| 男女av一区三区二区色多|