汽車加油行駛問題

2021-08-25 13:22:18 字數 1528 閱讀 8103

1.問題描述

給定乙個n*n 的方形網格,設其左上角為起點,座標為(1,1),x 軸向右為正,y 軸

向下為正,每個方格邊長為1。一輛汽車從起點出發駛向右下角終點,其座標為(n,n)。

在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守

如下規則:

(1)汽車只能沿網格邊行駛,裝滿油後能行駛k 條網格邊。出發時汽車已裝滿油,在

起點與終點處不設油庫。

(2)當汽車行駛經過一條網格邊時,若其x 座標或y 座標減小,則應付費用b,否則

免付費用。

(3)汽車在行駛過程中遇油庫則應加滿油並付加油費用a。

(4)在需要時可在網格點處增設油庫,並付增設油庫費用c(不含加油費用a)。

(5)(1)~(4)中的各數n、k、a、b、c均為正整數。

演算法設計:

求汽車從起點出發到達終點的一條所付費用最少的行駛路線。

資料輸入:

輸入資料。第一行是n,k,a,b,c的值,2 <= n <= 100,

2 <= k <= 10。第二行起是乙個n*n 的0-1方陣,每行n 個值,至n+1行結束。方陣的第i

行第j 列處的值為1 表示在網格交叉點(i,j)處設定了乙個油庫,為0 時表示未設油庫。

各行相鄰的2 個數以空格分隔。

結果輸出:

將找到的最優行駛路線所需的費用,即最小費用輸出.

sample input

9 3 2 3 6

0 0 0 0 1 0 0 0 0

0 0 0 1 0 1 1 0 0

1 0 1 0 0 0 0 1 0

0 0 0 0 0 1 0 0 1

1 0 0 1 0 0 1 0 0

0 1 0 0 0 0 0 1 0

0 0 0 0 1 0 0 0 1

1 0 0 1 0 0 0 1 0

0 1 0 0 0 0 0 0 0

sample output

2.動態規劃演算法的方程式

work[i][j][p]表示由(0,0)到達(i,j)並且剩下汽油可走p段路程的最小代價。

則work[i][j][p]=min,(q=0,1,2,3);

其中,s[4][3]=,,,};

只要有更新就重複計算

3.**實現

void main()

work[i][j][p]=min;

if(map[i][j]==1)

else if(work[i][j][p]==1000000)

break;}}

}}

} }printf("%d\n",work[n-1][n-1][0]);

file *fout;

fout=fopen("output2.txt","w");

fprintf(fout,"%d\n",work[n-1][n-1][0]);

fclose(fout);

}4。對於解這個問題,我還是不怎麼明白,真是糾結啊!那位朋友看到了這篇文章,感覺有所想法的話,可以留下言啊,謝謝!

汽車加油行駛問題

給定乙個n n 的方形網格,設其左上角為起點 座標為 1,1 x 軸向右為正,y 軸向下為正,每個方格邊長為1,如圖所示。一輛汽車從起點 出發駛向右下角終點 其 座標為 n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在 行駛過程中應遵守如下規則 1 汽車只能沿網格邊行駛,裝滿...

c 汽車加油行駛問題

給定乙個 n n 的方形網格,設其左上角為起點 座標為 1,1 x 軸向右為正,y軸向下為正,每個方格邊長為1。一輛汽車從起點 出發駛向右下角終點 其座標為 n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守如下規則 1 汽車只能沿網格邊行駛,裝滿油後能行駛 k...

P4009 汽車加油行駛問題

看了很多題解,無論什麼解法都繞不開分層圖 在本題中加滿油的車每次可以移動k步,那麼我們就可以建立乙個k 1層的分層圖,表示汽車油量k的狀態 油量0 k 然後根據題目要求建圖 首先我們規定 k從1開始 第k層第i行第j列點編號為 k 1 n n i 1 n j 首先我們從第k層 i,j 建立一條邊到第...