問題描述】
w*h的格仔畫了n條或垂直或水平寬度為1的直線,求出這些格仔被劃分成了多少個4連塊(上、下、左、右連通)。
【輸入格式】
第一行包含兩個整數:w和h,表示矩陣的列數和行數(行列編號都從1開始)。
第二行包含乙個整數n,表示有n條直線。
接下來的n行,每行包含四個整數:x1,y1,x2,y2,表示一條直線的列號和行號。
【輸出格式】
乙個整數,表示區域數量。
【輸入樣例】
10 10
51 4 6 4
1 8 10 8
4 1 4 10
9 1 9 5
10 6 10 10
【輸出樣例】
6
【資料範圍】
1<=w,h<=1000000 , 1<=n<=500
【**】
挑戰程式設計競賽(第2版)164頁
//#include #include #include #include#include #include#include #include #include #include #include #define ll long long int
using namespace std;
const int mm=1000001;
const int mmm=6006; //壓縮以後不超過6000
int n,w,h; //壓縮以前的寬度與高度
int x1[mm],y1[mm], x2[mm],y2[mm];
int g[mmm][mmm];
int dx=;
int dy=; //四個方向方向
int neww,newh;//壓縮以後的寬度和高度
int compress(int *x1, int *x2 ,int w)
}for(int i=0;i> q;
q.push( make_pair(i,j));
while( !q.empty())
neww = compress(x1, x2, w);
newh = compress(y1, y2, h);
memset( g, 0 , sizeof(g) );
for(int i=1;i<=n;i++)}}
for(int y=1; y<=newh;y++)
cout << endl;
}//cout << bfs();
return 0;
}
書中的的資料離散化之後不是這個小圖。
aoj 0531 paint color
塗色:(日文題目,自己翻譯成了中文)為了宣傳資訊競賽,要在長方形的三合板上噴油漆來製作招牌。三合板上不需要塗色的部分預先貼好了護板。被護板隔開的區域要塗上不同的顏色,比如上圖就應該塗上5種顏色。網上資料:請編寫乙個程式計算塗色數量,輸入資料中,保證看板不會被護板全部遮住,並且護板的邊一定是水平或垂直的。
輸入:第乙個數是寬w(1 ≤ w ≤ 1000000),第二個數是高h(1 ≤ h ≤ 1000000)。
第二行是護板的數量n(1 ≤ n ≤ 1000),接著n行是每個護板的左下角座標(x
1, y
1)和右上角座標 (x
2, y
2),用空格隔開: x
1, y
1, x
2, y
2(0 ≤ x
1< x
2≤ w, 0 ≤ y
1< y
2≤ h 都是整數)
招牌的座標系如下,左下角是(0, 0) ,右上角是(w, h) , 測試集中的30%都滿足w ≤ 100, h ≤ 100, n ≤ 100。
輸出:乙個整數,代表塗色數量。
input.txt
15 6output.txt101 4 5 6
2 1 4 5
1 0 5 1
6 1 7 5
7 5 9 6
7 0 9 2
9 1 10 5
11 0 14 1
12 1 13 5
11 5 14 6
0 0
5
AOJ 0531 座標離散化
塗色 日文題目,自己翻譯成了中文 為了宣傳資訊競賽,要在長方形的三合板上噴油漆來製作招牌。三合板上不需要塗色的部分預先貼好了護板。被護板隔開的區域要塗上不同的顏色,比如上圖就應該塗上5種顏色。請編寫乙個程式計算塗色數量,輸入資料中,保證看板不會被護板全部遮住,並且護板的邊一定是水平或垂直的。輸入 第...
AOJ 0531 座標離散化 bfs
題意 傳送門 aoj 0531 矩形的寬和高 1 w,h 1000000 資料範圍大,要離散化處理。對於劃分區域,bfs 即可 遞迴實現可能棧溢位 填充陣列 fld x y 代表左下角頂點座標離散表示為 x,y 的 1 1 矩形。include include include include inc...
NC 17881 座標離散化 並查集
題意 傳送門 nc 17881 題解考慮到程式 現的變數 x1,x2,x 3 x1,x2,x3 dots x1,x2,x3 取值較大,進行座標離散化。先處理相等的變數,用並查集維護 對於不相等的變數,判斷是否位於同乙個連通分量即可。include using namespace std define...