農夫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 公升。通常,吉普車必須用自身油箱中的油在沙...