description
在乙個 n 行 m 列的字元網格上,恰好有 2 個彼此分開的連通塊。每個連通塊的乙個格點與它的上、下、左、右的格仔連通。如下圖所示:
現在要把這 2 個連通塊連通,求最少需要把幾個』.』轉變成』x』。上圖的例子中, 最少只需要把 3 個』.』轉變成』x』。下圖用』*』表示轉化為』x』的格點。
第 1 行:2 個整數 n 和 m(1<=n,m<=50)
接下來 n 行,每行 m 個字元,』x』表示屬於某個連通塊的格點,』.』表示不屬於某個連通塊的格點
output
第 1 行:1 個整數,表示最少需要把幾個』.』轉變成』x』
sample input
6 16
................
..***x....***...
...***x....xx...
.***x......***..
........***xx...
.........***....
sample output
3
題目解析這道題是一道搜尋題,或者說是一道「半搜尋題」。作者的做法和其他同學的做法有些出入,先講其他同學的做法吧。
還是看看作者的做法吧。作者之所以說「有很大出入」是因為我的**除了輸入,與其他同學的幾乎完全不一樣。首先作者也需要處理2個連通塊,但是,作者選擇用2個深度優先搜尋分別找到連通塊1和連通塊2所包含的點的座標。當然這需要儲存,作者用了vector動態陣列(vectorvec[2]
,vec[0]表示第乙個連通塊,vec[1]表示第二個連通塊),它的基本型別是結構體da,da的兩個成員變數x,y是座標。
找到所有的塊過後,我們可以用2重for迴圈找到連通塊1和連通塊2中的塊所有的搭配,並用ans儲存它們之間距離的最小值。這裡並不需要用廣度優先搜尋找到最短距離,而是用了乙個求曼哈頓距離的公式。即(i,j)到(m,n)的曼哈頓距離=|i-m|+|j-n|。c++裡絕對值的函式是fabs(建議不要用abs),在cmath庫里。但是這個公式求的是兩個點的曼哈頓距離,不會出現重疊面積的情況,而現在是兩個塊——在運用時會重疊一塊面積,於是要將所得結果減1。
啊哈?你們覺得哪種方法簡單呢?
題外話
這次考試我們和高中的新生一起考,十分的興奮。說考遞迴和二分查詢,作者抓緊複習了一中午的二分查詢,結果沒有一道題考這個知識點。不過也好,作者沒有發揮失常,3道題全部ac,終於體驗了一把ak的爽。不久就是noi大賽了,有沒有一些同學和我一樣,也在期待11月呢?
程式樣例
真的不會超時嗎?同學們的做法——深度優先搜尋+廣度優先搜尋:
#include
#include
#include
using
namespace
std;
int n,m,pre[1000000],a[1000000],b[1000000],minn,ans=1e10;
int x[4]=,y[4]=;
char
map[100][100];
bool mark[100][100];
bool check(int s,int t)
void fun(int d)
void bfs(int r,int c)}}
}}void dfs(int r,int c)
}void f()
}int main()
作者覺得還是自己的好點。深度優先搜尋+曼哈頓距離:
/*lucky_glass*/
#include
#include
#include
#include
using
namespace
std;
struct da d;
vector
vec[2];
char
map[55][55];
int f[4][2]=,,,},r,c,s;
void flag(int x,int y)
}int main()
int la=vec[0].size(),lb=vec[1].size(),ans=1e8;
for(int i=0;ifor(int j=0;jint(fabs(vec[0][i].x-vec[1][j].x)+fabs(vec[0][i].y-vec[1][j].y)-1));
printf("%d\n",ans);
return
0;}
c 考試題目
一 專案提問 題 1 實現根號,要求最終與目標值的精度不大於0.0001 2 原題,求集合的子集c 的虛函式?innodb引擎的索引結構?為什麼是b 樹?三條查詢語句是否命中聯合索引?同步非同步阻塞非阻塞?為什麼是三次握手 四次揮手?timewait的意義?二 專案提問tcp ip5層協議 列舉協議...
Python考試題目記錄
考試時沒能完全寫出來,題目記不太清了,記錄一下,不知道答案對不對。僅做參考,不保證 的正確性!給出乙個列表l,找出支配元組 支配元組 列表l中有兩個元組t1,t2,if t1 0 t2 0 and t1 1 t2 1 and 至少有乙個元素,小於對應位置的元素 t1支配t2,要找t1 分析 1 先排...
2020 09 03 04 考試題目題解
題目傳送門 給出乙個圖,保證每個點有且僅有乙個出邊,對於每個點把它走 k 步這條路徑上的所有的點答案加 1 問最後每個點的答案。n le 5 times 10 5 考試的時候 sb 了,沒想出來怎麼做。首先你可以發現這其實是個基環樹森林,對於不在環上的點,它答案其實就是子樹內深度與它相差不超過 k ...