XDOJ 相鄰區域(序號71)題解

2021-10-13 05:23:57 字數 1704 閱讀 7082

題目如下:

乙個n行m列的矩陣被劃分成t個矩形區域,分別用數字1-t來標識,同乙個區域內的元素都用同乙個數字標識。如下圖所示,乙個6行8列的矩陣被分成8個矩形區域,分別用編號1-8標識。當兩個小區域之間公用一條邊時,稱這兩個區域相鄰,例如下圖中區域5的相鄰區域有6個,分別為1,2,3,6,7,8,但4並不是它的相鄰區域。請寫乙個程式找出區域k的所有相鄰區域。

輸入說明:

輸入第一行為四個整數n,m, t,k,整數之間用空格分隔。n表示矩陣行數(n<20),m表示矩陣列數(m<20),t表示矩陣被劃分為t個矩形區域(0輸出說明:

輸出為乙個整數,表示與k相鄰的區域個數。

輸入樣例

6 8 8 5

1 1 2 2 2 3 3 4

1 1 2 2 2 3 3 4

1 1 2 2 2 3 3 4

1 1 5 5 5 5 5 6

1 1 5 5 5 5 5 6

7 7 7 7 7 8 8 8

輸出樣例

6這個題目很好理解,就是給你一坨二維陣列,將其分為了t個矩形塊,並且替你標好了編號,指定乙個編號,讓你找到所有與目標矩形塊相鄰的矩形塊,並輸出矩形塊的數量。

關鍵點如下:

**如下:(因為xder統一學c,所以就貼c了)

#include

intmain()

}int flag1=-1

,flag2=-1

,flag3=-1

,flag4=-1

;//1是左上角,2是右上角,3是左下角,4是右下角

for(i=

0;i)//確定兩個頂點}if

(flag1!=-1

)break;}

for(i=

0;i)//確定右上角}}

if(flag2!=-1

)break;}

for(i=

0;i)//確定右下角}}

if(flag4!=-1

)break;}

int b[t+1]

;//定義乙個新的陣列b,作為標記陣列,如果對矩形塊四邊迴圈時出現了對應編號的**,則標記為1

for(i=

0;i1;i++

)//變數陣列不能在定義時賦值,所以單獨賦值

for(i=flag1;i<=flag2;i++

)//迴圈上邊

}for

(i=flag1;i<=flag2;i++

)//迴圈下邊

}for

(i=flag3;i<=flag4;i++

)//迴圈左邊

}for

(i=flag3;i<=flag4;i++

)//迴圈右邊

}for

(i=0

;i1;i++

)對b陣列進行加法,結果即為相鄰區域的數目

printf

("%d"

,y);

return0;

}

**中小細節有很多,還需要自行學習,我不再一一贅述。

相鄰問題和區域問題

相鄰問題使用 法解決 問題1 26個英文本母能組成多少4位數的字串,其中每位字母都不相同且b和d不相鄰?答案 num a 26,4 c 24,2 3 2 解析 先取總的方案數既 a 26,4 再將b d 看成乙個元素,相當於已經先取了b和d,再從26 2個元素中取2個出來,再對這3個元素進行全排列既...

CentOS7區域設定

區域設定的配置檔案在 etc locale.conf,通過localectl命令進行設定 systemd服務在啟動的時候讀取區域配置檔案,完成系統的設定。命令的幾個常用方法如下 1 檢視當前配置 root localhost localectl status system locale lang e...

7 GDI物件之區域Rgn

crgn createellipticrgn int x,int y,int height,int width 建立乙個橢圓形區域 crgn createellipticrgnindirect crect rect 建立乙個橢圓形區域 crgn createrectrgn int x,int y,i...