題目如下:
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個方向為依據.思路解析 本體為模擬題,簡單模擬即可.唯一需要注意的是,迭代的次數很多,可以借助滾動...