ZOJ1002解題報告

2021-08-23 12:00:03 字數 1449 閱讀 9023

題目如下:

zoj1002

題目大意

在乙個最大為4*4的方格內建blockhouse(

碉堡)

但是有條件

1. 兩個及以上blockhouse不能位於同一行或者同一列

2. 如果有wall,兩個blockhouse可以位於其兩側

3. blockhouse只能建在空地

注意的點

1. 多次輸入;輸入0時,結束

思路:

按上圖順序進行dfs,按下面**進行k與map[x][y]中的x和y的轉換

if(k%n == 0) 

else

ac——c++**:

比較low,>_<

有一些輸出的注釋,自己除錯使用的

#include"cstdio"

#include "iostream"

using

namespace

std;

int best ;

char

map[4][4];

int n;

bool judge(int x, int y)

if(map[i][y] == 'x')

}for(int i=y-1;i>=0;i--)

if(map[x][i] == 'x')

}//cout

return c;

} void backtrack(int k, int count)

if(k%n == 0)

else

//printf("x:%d y:%d\n",x,y);

if(map[x][y] == '.' && judge(x, y))

backtrack(k+1, count);

}int main()

//二維字元陣列

for(int i=0;ifor(int j=0;jcin>>ch;

map[i][j] = ch; }}

//計算

best = 0;

backtrack(1, 0);

printf("%d\n", best);

}return0;}

/*自己程式出問題的例子

3...

..x.x.

3...

..x.xx

*/

總結:

其實對於這道題,自己之前的乙個小錯誤,我除錯了好久,我思考了一下,歸根到底還是因為自己對回溯演算法的不熟悉。

然後自己又嘗試另一種方法去再次看回溯演算法,發現其實它就是dfs的思想,然後也是按樹的先根順序進行搜尋,需要自己發現的就是:進入左子樹搜尋時的條件,進入右子樹搜尋的條件,以及一些減枝的條件。

zoj 1002 最大獨立集

題意 n n的矩陣中,有空地和牆,放置機械人能攻擊到垂直和水平地方 有牆則被隔絕 問最多能放多少機械人,相互之間不攻擊 解題思路 最大獨立集,對於實際頂點應該是除去牆。然後貼模板 view code include include define n 50 bool flag n a n n inta...

zoj3961解題報告

借今年浙江省賽的題練練手。首先,由題意知,a與b發資訊,當a與b連續互相發資訊m天時,好感度point 1.輸入有a向b發資訊的天數與b向a發資訊的起止天數,具體格式看題。n是指在求第n天的point。根據其給出了起止天數可以把它當做求公共區間的問題。自定義結構體有start和endd屬性代表起止天...

ZOJ 3804 解題報告

題目相關 2 每個寵物在睡眠狀態 sleep 0 時,若周邊awake minion數剛好為3時,則該寵物進入清醒狀態 3 寵物會覺得這個遊戲無聊,在某乙個時刻,選擇離開,狀態轉為 x 鄰近關係以周邊8個方向為依據.思路解析 本體為模擬題,簡單模擬即可.唯一需要注意的是,迭代的次數很多,可以借助滾動...