USACO Overfencing 穿越柵欄

2021-08-02 11:11:04 字數 1446 閱讀 5700

農夫john 在外面的田野上搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口。更幸運的是,他所建造的迷宮是乙個「完美的」迷宮:即你能從迷宮中的任意一點找到一條走出迷宮的路。給定迷宮的寬w(1<=w<=38)及長h(1<=h<=100)。2*h+1行,每行2*w+1的字元以下面給出的格式表示乙個迷宮.然後計算從迷宮中最「糟糕」的那乙個點走出迷宮所需的步數。(即使從這一點以最優的方式走向最靠近的出口,它仍然需要最多的步數)當然了,牛們只會水平或垂直地在x 或y 軸上移動,他們從來不走對角線。每移動到乙個新的方格算作一步(包括移出迷宮的那一步)這是乙個w=5,h=3 的

5 3+-+-+-+-+-+

| |

+-+ +-+ + +

| | | |

+ +-+-+ + +

| | |

+-+ +-+-+-+

如上圖的例子,柵欄的柱子只出現在奇數行或奇數列.每個迷宮只有兩個出口。

input format

第一行: w 和h(用空格隔開)

第二行至第2*h+2行: 每行2*w+1個字元表示迷宮

sample input (file maze1.in)

5 3+-+-+-+-+-+

| |

+-+ +-+ + +

| | | |

+ +-+-+ + +

| | |

+-+ +-+-+-+

output format

輸出乙個單獨的整數,表示能保證牛從迷宮中任意一點走出迷宮的最小步數。

sample output (file maze1.out)

9

這道題目,我實在是不想吐槽,我花了30分鐘想正解,明顯是dfs,又花了30分鐘重構**,整個就是一部血淚史,這題最主要的思想就是逆推,從出口向前推,然後注意一下解如何輸出就可以了,特別要小心讀入,一定不能一行讀入乙個回車,不然就會**!

#include

#include

#include

int n,m;

int f[301][301];

char s[301][301];

void dfs(int i,int j,int sum)

int main()

// for(i=1;i<=n;i++)

int ans=0;

int chukou1i=0,chukou1j=0,chukou2i=0,chukou2j=0;

for(i=1;i<=n;i++)

else}}

if(chukou2i)break;

}dfs(chukou1i,chukou1j,0);

dfs(chukou2i,chukou2j,0);

for(i=1;i<=n;i++)

USACO Overfencing解題報告

思路 dijkstra求最短路徑,然後對於同一出發點求到兩個出口之間的較小者,最後對於所有出發點求乙個最大值,即所謂的worst point.當然這題在空間上需要優化,用堆來優化是乙個可行的辦法。其實用乙個unsigned char型的陣列來記錄每兩點間距離就可以保證恰好不超空間。當然,網上說可以用...

引用 C AE載入shp 柵

ae載入shp 柵格 地 檔資料 arcgis家園 rel noopener noreferrer 引用 c ae載入shp 柵格 地 檔資料 arcgis家園 小馬哥淡定 新增arcgis命名空間 using esri.arcgis.carto using esri.arcgis.geometry...

bit 穿越沙漠

參考 無上陽光13的部落格 穿越沙漠 acm.bit.edu.cn 1005 智力題 時間限制 1秒 記憶體限制 64m problem description 一輛吉普車來到 x 公里寬的沙漠邊沿 a 點,吉普車的耗油量為 1 公升 公里,油量為 500 公升。通常,吉普車必須用自身油箱中的油在沙...