問題描述
小 g 最近開始對地理感興趣,小 g 找來了伯蘭的地圖,並用網格將其劃分。被劃分後
的地圖是乙個 n*m 的矩形。每乙個單元格的大小是 1*1 的,每一格代表著水或者陸地。地
圖外則代表著海洋。湖泊是相鄰的所有代表水的格仔組成的不與海洋相鄰的最大區域。地圖
上有著超過 k 的湖泊,小 g 想將其中的一些代表水的格仔變為陸地,使得地圖中只存在精
確的 k 個湖泊,又不想改變太多的格仔。所以,他請你幫忙計算使得地圖中只存在 k 個湖泊
所需要改變的最小格仔數。
★資料輸入
輸入的第一行為包括三個整數n,m,k(1 ≤ n, m≤ 50, 0 ≤ k≤ 50)表示地圖的大小和需
要儲存的湖泊數量。
接下來 n 行,每行包括 m 個字元用來表示地圖資訊,只包括「.」和「*」兩種字元。( 「.」
表示水, 「*」表示陸地)。
輸入資料保證原始的湖泊數量大於等於 k。
30%的資料 n*m<=30。
70%的資料 n*m<=200。
100%的資料 n*m<=2500。
題意:
給n,m和k,n和m為所給矩陣的高和寬。k是要求最多剩下的湖的數量。
在所給的矩陣中,*代表陸地,.代表水。
湖的定義是一片連續的水(上下左右四個方向),並且水不含邊界。
水含邊界的情況被成為海。
問最少填多少湖的面積,使得湖的數量減少到k.
海洋包圍的小島,島內的有湖,'.'代表水,'*'代表陸地,給出的n*m的地圖裡至少有k個湖,求填掉面積盡量少的水,使得湖的數量正好為k。
解題思路:先深搜dfs找出所有的湖泊,然後按照面積從小到大排序,若湖的數量為cnt,填掉前cnt-k個湖。
#include#include#include
#include
using
namespace
std;
//author:zeze 2016-12-11 13:24:39
//dfs+greedy
struct
lakeslake[2500
];bool
cmp(lakes a,lakes b)
int sx[4]=;
int sy[4]=;
char map[51][51
];bool vis[51][51
];int
num,cnt,ans,islake;
intn,m,k;
void dfs(int x,inty)}
void filllake(int x,inty)}
intmain()}}
}sort(lake,lake+cnt,cmp);//
sort lakes by num
memset(vis,0,sizeof
(vis));
for(t=0;t//
fill mini lake
for(i=0;i)}}
}printf(
"%d\n
",ans);
for(i=0;i)
return0;
}
#includeusingnamespace
std;
intn,m,k;
char a[55][55
];bool vis[55][55
];int dx[6]=;
int dy[6]=;
intnum,cnt,islake;
intans;
struct
lakelk[
2600
];bool
cmp(lake a,lake b)
void dfs(int x,inty)}
void fil(int x,int y,int
id)}
intmain()
memset(vis,
0,sizeof
(vis));
for(int i=0;i);}}
}memset(vis,
0,sizeof
(vis));
sort(lk,lk+cnt,cmp);
for(int l=0;l)}}
printf(
"%d\n
",ans);
for(int i=0;i)
}
演算法實驗題3 2 排程問題
演算法實驗題3.2 排程問題 問題描述 作業排程在電腦科學中是乙個經典問題並且已經研究了很長一段時間。不同的排程 問題往往滿足不同的約束條件和排程需求而顯得千差萬別。這裡我們考慮二機排程問題。實驗室裡有兩台機器a 和b。機器a 有n 種工作模式,分別為mode 0,mode 1,mode n 1,同...
演算法實驗題 猴子分桃問題
問題描述 動物園裡的n只猴子編號為1,2,n,依次排成一隊等待飼養員按規則分桃。動物園的分桃規則是每只猴子可分得m個桃子,但必須排隊領取。飼養員迴圈的每次取出1個,2個,3個.k個桃子放入筐中,由排在隊首的猴子領取。取到筐中的桃子數為k後,又重新從1開始。當筐中桃子數加上隊首猴子已經取得的桃子數不超...
51流水燈實驗
課程名稱 微控制器原理與應用 姓 名 趙存檔 2015 2016 學年第 1 學期 實驗專案 一 預習報告 專案名稱 led高低電平交替閃爍程式 實驗目的及要求 1.正確安裝keil軟體 2.在 proteus 的環境下,設計硬體原理圖 3 在keil 整合環境下設計c語言程式 4.在 proteu...