C 搜尋演算法和曼哈頓距離之最少連通代價

2021-09-30 13:50:06 字數 1501 閱讀 3832

最少聯通代價

在乙個n行m列的字元網格上,恰好有 2 個彼此分開的連通塊。每個連通 塊的乙個格點與它的上、下、左、右的格仔連通。如下圖所示:

現在要把這 2 個連通塊連通,求最少需要把幾個』.』轉變成』x』。上圖的例子中, 最少只需要把 3 個』.』轉變成』x』。下圖用』*』表示轉化為』x』的格點。

第1行:2個整數n和m(1<=n,m<=50)接下來 n 行,每行m個字元,』x』表示屬於某個連通塊的格點,』.』表示不屬於某個連通塊的格點。

第1行:1個整數,表示最少需要把幾個』.』轉變成』x』。

sample input

6 16            

................

..***x....***...

...***x....xx...

.***x......***..

........***xx...

.........***....

3

1<=n,m<=50

這道題可以先用深搜把第乙個連通塊的的格點改為's',然後廣搜從每個's'到某個'x'的最短距離(即到第二個連通塊的最短路線長度),在這些結果裡找到最小的,最後輸出。

**如下:

先用深搜把第乙個連通塊的的所有格點改為's',再求曼哈頓距離(如圖)。

**如下:

#include#include#include#includeusing namespace std;

int n,m;

int ans=1e10; //ans用於取最小值

int x[4]=,y[4]=; //方向

char map[100][100]; //用於記錄字元網格

bool check(int s,int t) //判斷是否可以走到下乙個格點

void dfs(int r,int c) //將第乙個連通塊的所有格點改為's'

}void f() //將第乙個連通塊的所有格點改為's'

}int main()

2018 2 13 C 搜尋演算法

title author date createtime categories c 搜尋演算法 lindexi 2018 2 13 17 23 3 0800 2018 2 13 17 23 3 0800 c 本文主要講c 搜尋演算法。這演算法是乙個模糊的演算法,用在使用者在找乙個他不確定的文字。判斷...

搜尋演算法(DFS和BFS)

題目 有n件物品,每件物品的重量為w i 價值為c i 現在需要選出若干物品放入乙個容器為v的揹包中,使得在選入揹包的物品重量和不超過容量v的前提下,讓揹包中物品的價值之和最大,求最大價值。1 n 20 解題 如下 includeconst int maxn 30 int n,v,maxvalue ...

js實現排序和搜尋演算法

我們已經知道有一些常見的排序演算法,如氣泡排序,選擇排序,插入排序,歸併排序,快速排序和堆排序。下面我們逐個地分析並編寫相關 首先在排序之前,我們需要先建立乙個陣列來表示待排序和搜尋的資料結構以及陣列操作中最常見的交換位置函式swap。如下 function arraylist this.tostr...