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

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| 国产乱码精品一区二区三区不卡| 亚洲婷婷综合色高清在线| 国产欧美一区二区精品性色| 欧美日韩在线播放一区| 久久精品日产第一区二区| 亚洲欧美日韩在线不卡| 亚洲欧美清纯在线制服| 欧美成年人视频网站| 久久久人人人| 久久一本综合频道| 欧美激情影音先锋| 亚洲欧洲视频| 亚洲韩国青草视频| 99ri日韩精品视频| 久久丁香综合五月国产三级网站| 毛片av中文字幕一区二区| 老司机午夜精品| 欧美日韩国产综合一区二区| 国产无一区二区| 亚洲理伦电影| 可以看av的网站久久看| 亚洲视频在线一区| 免费欧美电影| 精品成人一区二区三区四区| 亚洲午夜视频在线观看| 毛片av中文字幕一区二区| 亚洲第一精品夜夜躁人人躁| 亚洲欧美一区在线| 国产精品高清在线| aa级大片欧美三级| 亚洲免费观看高清完整版在线观看| 欧美一区二区在线看| 久久免费视频在线观看| 亚洲欧美一区二区视频| 久久久久**毛片大全| 99视频在线精品国自产拍免费观看| 欧美一级大片在线观看| 国产欧美精品日韩精品| 中文亚洲字幕| 亚洲精品在线观看视频| 欧美另类高清视频在线| 宅男精品视频| 亚洲影院免费| 在线观看成人一级片| 欧美激情第二页| 欧美日韩一区在线观看| 欧美一区二区视频在线观看| 欧美一区二区三区婷婷月色 | 亚洲欧美日韩视频二区| 欧美国产精品一区| 久久免费视频一区| 亚洲综合欧美| 久久综合中文字幕| 亚洲少妇一区| 免费在线观看精品| 午夜一级在线看亚洲| 久久国产精品高清| 午夜久久99| 欧美先锋影音| 亚洲国产高清一区二区三区| 欧美性猛片xxxx免费看久爱| 欧美韩日亚洲| 国产欧美一区二区三区久久| 免费成人在线视频网站| 欧美色网在线| 国产精品久久久久国产精品日日| 狼狼综合久久久久综合网| 国产日韩欧美在线播放| 一本色道婷婷久久欧美| 999在线观看精品免费不卡网站| 久久久7777| 免费欧美网站| 狠狠色狠狠色综合日日小说| 性久久久久久久| 亚洲影视在线| 国产欧美 在线欧美| 亚洲欧美日韩一区在线观看| 性欧美大战久久久久久久免费观看| 亚洲一区高清| 久久久夜夜夜| 日韩一区二区福利| 国产精品美女午夜av| 亚洲午夜小视频| 亚洲欧美中文字幕| 亚洲国产精品成人va在线观看| 免费人成网站在线观看欧美高清| 欧美大片免费看| 午夜久久久久久| 黄色影院成人| 女仆av观看一区| 性欧美激情精品| 亚洲美女中出| 久久精品夜色噜噜亚洲aⅴ| 1769国内精品视频在线播放| 欧美日韩国产精品专区| 欧美一区二区在线视频| 最近看过的日韩成人| 亚洲女同在线| 一本大道久久a久久精二百| 国产欧美精品日韩区二区麻豆天美 | 亚洲精品乱码久久久久久日本蜜臀 | 欧美不卡一区| 夜夜嗨av一区二区三区四季av | 91久久久久| 欧美日韩一区综合| 欧美成人福利视频| 亚洲视频高清| 亚洲精品一级| 99re66热这里只有精品4| 美女久久一区| 欧美在线视频一区| 在线观看亚洲a| 国语自产精品视频在线看8查询8| 欧美一区成人| 欧美一区二区在线播放| 亚洲一区二区三区精品在线观看| 免费成人高清视频| 美女露胸一区二区三区| 欧美激情第五页| 亚洲美女黄色片| 日韩一级精品视频在线观看| 欧美成人网在线| 欧美高清一区| 亚洲成色精品| 欧美在线1区| 欧美激情综合| 亚洲高清三级视频| 午夜久久一区| 久久av一区| 欧美伦理a级免费电影| 久久久久久久性| 国产精品美女久久久久aⅴ国产馆| 亚洲欧美日韩国产中文在线| 亚洲欧洲免费视频| 日韩一级免费| 亚洲伊人伊色伊影伊综合网| 久久精品女人天堂| 亚洲韩国日本中文字幕| 亚洲午夜精品17c| 久久久久久日产精品| 欧美视频一区在线| 国产精品久久久一区二区三区 | 99精品国产在热久久| 99精品福利视频| 欧美另类变人与禽xxxxx| 在线一区二区三区四区五区| 91久久综合| 中文日韩在线| 欧美成人久久| 欧美高清在线视频| 六月天综合网| 久久天天躁狠狠躁夜夜爽蜜月| 欧美一区二区视频在线观看| 亚洲区一区二| 欧美激情第10页| 亚洲精品1区| 欧美电影专区| 久久五月天婷婷| 狠狠狠色丁香婷婷综合久久五月| 一区二区高清| 欧美一区二区日韩一区二区| 久久人人爽人人| 欧美亚洲视频在线观看| 国产精品视频最多的网站| 亚洲欧美一区二区在线观看| 欧美另类69精品久久久久9999| 亚洲毛片在线免费观看| 国产精品二区二区三区| 久热精品视频在线| 欧美猛交免费看| 欧美在线网站| 久久久夜精品| 亚洲国产高清一区二区三区| 久久深夜福利免费观看| 亚洲一区二区三区在线视频| 99伊人成综合| 美女久久一区| 精品福利免费观看| 美日韩在线观看| 国产一区二区久久| 一区电影在线观看| 国内精品国语自产拍在线观看| 欧美在线1区| 美女露胸一区二区三区| 久久精选视频| 国产美女精品视频| 亚洲区在线播放| 国产色综合久久| 欧美黄污视频| 国产一区亚洲| 一本色道**综合亚洲精品蜜桃冫| 国产亚洲精品综合一区91| 亚洲激情视频网| 国产日本欧美视频| 免费影视亚洲| 9久re热视频在线精品| 久久国产成人| 亚洲欧洲av一区二区| 国产精品婷婷午夜在线观看|