題意:多組輸入,輸入兩個整數n,k
在乙個n*n的矩陣中擺放棋子。
其中』.『為空白區域,』#'為棋子區域;q
在棋子區域擺放k個棋子,並且要求乙個棋子的所在的行和列不能再擺放棋子。
思路:深搜的板子題,拜訪的棋子數初始化為0;
(1)從矩陣的第一行開始,
(2)遍歷每一行每乙個元素尋找』#』;
(3)如果其沒有被訪問過,那麼標記這個位置,擺放棋子數加1;
(4)然後遍歷下一行,重複(2)(3)過程;
(5)如果在此過程中棋子數等於k,那麼方案數加1,返回;如果遍歷至最後一行也返回。
#include
#include
int visited[10]
;int n,k,count;
char mark[10]
[10];
void
dfs(
int x,
int y)
if(x>=n)
return
;for
(j =
0;j dfs(x +
1, y);}
intmain()
return0;
}
#include
#include
#include
#include
using
namespace std;
struct node
;int vis[40]
[40][
40];char map[40]
[40][
40];int move[6]
[3]=
,,,,
,};int l,r,c;
int x1,y1,z1;
void
bfs(
)for
(int i =
0;i <
6;i++)}
} cout<<
<}int
main()
}}memset
(vis,0,
sizeof
(vis));
bfs();
}return0;
}
題意:假設農夫與牛在乙個數軸的兩個不同的位置,農夫每步可以前進或後退一格,也可以跳躍到當前座標兩倍的位置。
算出農夫要多少步才能抓住牛。
思路:已經去過的位置不能再去;
每一步選擇三種方式中的一種,直到抓住牛。
#include
#include
#include
using
namespace std;
const
int maxn=
1e6;
int n,k;
int vis[maxn+10]
;struct step};
queueq;
intmain()
else
if(s.x +
1<=maxn&&
!vis[s.x+1]
)if(s.x *
2<=maxn&&
!vis[s.x*2]
) q.
pop();
}}}return0;
}
題意:多組輸入,當輸入0時,輸入結束。
計算輸入資料的倍數(用十進位制表示),但是倍數的每一位只能是0或1,
評測實施特判,即只輸出乙個滿足條件的輸入資料的倍數即可。
思路:水題,直接上**。
#include
int vis,n;
void
dfs(
unsigned
long
long x,
int y)
;int
main()
return0;
}void
dfs(
unsigned
long
long x,
int y)
dfs(x*
10,y+1)
;dfs
(x*10+1
,y+1);
}
題意:多組輸入。
每次輸入兩個質數 ,計算將前乙個質數標為後乙個質數所需要的最小步數,每一步只能改變一位數字,且改變後仍然是質數。不能變為後乙個質數的則輸出「impossible」。
思路:改變一次判斷一次是否為質數,且每個數至多只能出現一次。
#include
#include
#include
#include
using
namespace std;
int m,n;
int data[
10000];
struct node
;int
isprime
(int x)
void
bfs(
)for
(int i =
1; i <=
9;i +=2
)}for(
int i =
0;i <=
9;i++)}
for(
int i =
0;i <=
9;i++)}
for(
int i =
1;i <=
9;i++)}
}printf
("impossible\n");
return;}
intmain()
return0;
}
題意:在5*5的矩陣1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
思路:這道題評測姬的資料有缺陷,導致我僥倖ac,貼上**。
#include
int maze[5]
[5];
int move[4]
[2]=
,,,}
;void
bfs(
int x,
int y)
return;}
intmain()
題意:多組輸入,輸入 0 0結束。
『 * 』橫豎斜有『*'算一塊,計算矩陣中有幾塊油田。
思路:與地牢類似,但有細微不同。
#include
int m,n;
char map[
110]
[110];
int move[8]
[2]=
,,,,
,,,}
;void
dfs(
int x,
int y)
return;}
intmain()
}}printf
("%d\n"
,total);}
return0;
}
省賽訓練F 廣搜
問題的模型是 在允許消耗一定量生命換取時間的前提下,從起始點到終點所需的最短時間。利用廣度優先搜尋,陣列ti i j k 表示失去k點血量時,到達 i,j 的最快時間。由於開始有100點血,血量小於等於0時死亡,實際可用血量是99。使用優先佇列,佇列節點有三個屬性 x,y,k,x,y 為該節點表示的...
藍橋杯訓練 爆搜 猜年齡
問題描述 猜年齡美國數學家維納 n.wiener 智力早熟,11歲就上了大學。他曾在1935 1936年應邀來中國清華大學講學。一次,他參加某個重要會議,年輕的臉孔引人注目。於是有人詢問他的年齡,他回答說 我年齡的立方是個4位數。我年齡的4次方是個6位數。這10個數字正好包含了從0到9這10個數字,...
HDOJ 2019寒假訓練 BFS(寬搜)總結篇
bfs演算法工作機制 由一點引起的 對周圍的資料進行盲目搜尋 即無權值路徑 根據這一點bfs更多用於座標化的迷宮,或者不需要考慮有關路徑權值大小的圖形等的抽象搜尋問題。可以將bfs的過程想象成水波的漣漪 即若每乙個搜尋中心即水波的中心,則從該搜尋中心出發經由的搜尋點則是同一漣漪環上的點。然後漣漪上的...