广度优先搜索和深度优先搜索训练题 .pdf
《广度优先搜索和深度优先搜索训练题 .pdf》由会员分享,可在线阅读,更多相关《广度优先搜索和深度优先搜索训练题 .pdf(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【题目 1】N 皇后问题(八皇后问题的扩展)【题目 2】排球队员站位问题【题目 3】把自然数分解为若干个自然数之和。【题目 4】把自然数分解为若干个自然数之积。【题目 5】马的遍历问题。【题目 6】加法分式分解【题目 7】地图着色问题【题目 8】在 n*n的正方形中放置长为2,宽为 1 的长条块,【题目 9】找迷宫的最短路径。(广度优先搜索算法)【题目 10】火车调度问题【题目 11】农夫过河【题目 12】七段数码管问题。【题目 13】把 1-8 这 8 个数放入下图8 个格中,要求相邻的格(横,竖,对角线)上填的数不连续.【题目 14】在 44 的棋盘上放置8 个棋,要求每一行,每一列上只能
2、放置2 个.【题目 15】迷宫问题.求迷宫的路径.(深度优先搜索法)【题目 16】一笔画问题【题目 17】城市遍历问题.【题目 18】棋子移动问题【题目 19】求集合元素问题(1,2x+1,3X+1类)【题目】N 皇后问题(含八皇后问题的扩展,规则同八皇后):在 N*N 的棋盘上,放置N 个皇后,要求每一横行每一列,每一对角线上均只能放置一个皇后,问可能的方案及方案数。const max=8;var i,j:integer;a:array1.max of 0.max;放皇后数组 b:array2.2*max of boolean;/对角线标志数组 对角线标志数组 col:array1.max
3、of boolean;列标志数组 total:integer;统计总数 procedure output;输出 var i:integer;begin 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 40 页 -write(No.:4,total+1:2,);for i:=1 to max do write(ai:3);write();if(total+1)mod 2=0 then writeln;inc(total);end;function ok(i,dep:integer):boolean;判断第 dep 行第 i 列可放否 begin ok:=false;if(bi+de
4、p=true)and(cdep-i=true)and(adep=0)and(coli=true)then ok:=true end;procedure try(dep:integer);var i,j:integer;begin for i:=1 to max do 每一行均有max种放法 if ok(i,dep)then begin adep:=i;bi+dep:=false;/对角线已放标志 cdep-i:=false;对角线已放标志 coli:=false;列已放标志 if dep=max then output else try(dep+1);递归下一层 adep:=0;取走皇后,回溯
5、 bi+dep:=true;恢复标志数组 cdep-i:=true;coli:=true;end;end;begin for i:=1 to max do begin ai:=0;coli:=true;end;for i:=2 to 2*max do bi:=true;for i:=-(max-1)to max-1 do ci:=true;total:=0;try(1);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 40 页 -writeln(total:,total);end.【测试数据】n=8 八皇后问题 No.1 1 5 8 6 3 7 2 4 No.2 1 6 8 3
6、7 4 2 5 No.3 1 7 4 6 8 2 5 3 No.4 1 7 5 8 2 4 6 3 No.5 2 4 6 8 3 1 7 5 No.6 2 5 7 1 3 8 6 4 No.7 2 5 7 4 1 8 6 3 No.8 2 6 1 7 4 8 3 5 No.9 2 6 8 3 1 4 7 5 No.10 2 7 3 6 8 5 1 4 No.11 2 7 5 8 1 4 6 3 No.12 2 8 6 1 3 5 7 4 No.13 3 1 7 5 8 2 4 6 No.14 3 5 2 8 1 7 4 6 No.15 3 5 2 8 6 4 7 1 No.16 3 5 7 1
7、 4 2 8 6 No.17 3 5 8 4 1 7 2 6 No.18 3 6 2 5 8 1 7 4 No.19 3 6 2 7 1 4 8 5 No.20 3 6 2 7 5 1 8 4 No.21 3 6 4 1 8 5 7 2 No.22 3 6 4 2 8 5 7 1 No.23 3 6 8 1 4 7 5 2 No.24 3 6 8 1 5 7 2 4 No.25 3 6 8 2 4 1 7 5 No.26 3 7 2 8 5 1 4 6 No.27 3 7 2 8 6 4 1 5 No.28 3 8 4 7 1 6 2 5 No.29 4 1 5 8 2 7 3 6 No.30
8、 4 1 5 8 6 3 7 2 No.31 4 2 5 8 6 1 3 7 No.32 4 2 7 3 6 8 1 5 No.33 4 2 7 3 6 8 5 1 No.34 4 2 7 5 1 8 6 3 No.35 4 2 8 5 7 1 3 6 No.36 4 2 8 6 1 3 5 7 No.37 4 6 1 5 2 8 3 7 No.38 4 6 8 2 7 1 3 5 No.39 4 6 8 3 1 7 5 2 No.40 4 7 1 8 5 2 6 3 No.41 4 7 3 8 2 5 1 6 No.42 4 7 5 2 6 1 3 8 No.43 4 7 5 3 1 6 8
9、 2 No.44 4 8 1 3 6 2 7 5 No.45 4 8 1 5 7 2 6 3 No.46 4 8 5 3 1 7 2 6 No.47 5 1 4 6 8 2 7 3 No.48 5 1 8 4 2 7 3 6 No.49 5 1 8 6 3 7 2 4 No.50 5 2 4 6 8 3 1 7 No.51 5 2 4 7 3 8 6 1 No.52 5 2 6 1 7 4 8 3 No.53 5 2 8 1 4 7 3 6 No.54 5 3 1 6 8 2 4 7 No.55 5 3 1 7 2 8 6 4 No.56 5 3 8 4 7 1 6 2 No.57 5 7 1
10、 3 8 6 4 2 No.58 5 7 1 4 2 8 6 3 No.59 5 7 2 4 8 1 3 6 No.60 5 7 2 6 3 1 4 8 No.61 5 7 2 6 3 1 8 4 No.62 5 7 4 1 3 8 6 2 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 40 页 -No.63 5 8 4 1 3 6 2 7 No.64 5 8 4 1 7 2 6 3 No.65 6 1 5 2 8 3 7 4 No.66 6 2 7 1 3 5 8 4 No.67 6 2 7 1 4 8 5 3 No.68 6 3 1 7 5 8 2 4 No.69 6 3
11、1 8 4 2 7 5 No.70 6 3 1 8 5 2 4 7 No.71 6 3 5 7 1 4 2 8 No.72 6 3 5 8 1 4 2 7 No.73 6 3 7 2 4 8 1 5 No.74 6 3 7 2 8 5 1 4 No.75 6 3 7 4 1 8 2 5 No.76 6 4 1 5 8 2 7 3 No.77 6 4 2 8 5 7 1 3 No.78 6 4 7 1 3 5 2 8 No.79 6 4 7 1 8 2 5 3 No.80 6 8 2 4 1 7 5 3 No.81 7 1 3 8 6 4 2 5 No.82 7 2 4 1 8 5 3 6 No
12、.83 7 2 6 3 1 4 8 5 No.84 7 3 1 6 8 5 2 4 No.85 7 3 8 2 5 1 6 4 No.86 7 4 2 5 8 1 3 6 No.87 7 4 2 8 6 1 3 5 No.88 7 5 3 1 6 8 2 4 No.89 8 2 4 1 7 5 3 6 No.90 8 2 5 3 1 7 4 6 No.91 8 3 1 6 2 5 7 4 No.92 8 4 1 3 6 2 7 5 total:92 对于 N 皇后:皇后N 4 5 6 7 8 9 10 方案数2 10 4 40 92 352 724【题目】排球队员站位问题图为排球场的平面图,其
13、中一、二、三、四、五、六为位置编号,二、三、四号位置为前排,一、六、五号位为后排。某队比赛时,一、四号位放主攻手,二、五号位放二传手,三、六号位放副攻手。队员所穿球衣分别为,号,但每个队 四 三 二 员的球衣都与他们的站位号不同。已知号、号队员不在后排,号、号队员不是二传手,号、号队员不在同一排,号、五 六 一 号队员不是副攻手。编程求每个队员的站位情况。【算法分析】本题可用一般的穷举法得出答案。也可用回溯法。以下为回溯解法。【参考程序】type sset=set of 1.6;var a:array1.6of 1.6;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 40 页 -
14、d:array1.6of sset;i:integer;procedure output;输出 begin if not(a3in 2,3,4)=(a4 in2,3,4)then begin 3,4号队员不在同一排 write(number:);for i:=1 to 6 do write(i:8);writeln;write(weizhi:);for i:=1 to 6 do write(ai:8);writeln;end;end;procedure try(i:integer;s:sset);递归过程i:第 i 个人,s:哪些位置已安排人了 var j,k:integer;begin fo
15、r j:=1 to 6 do begin 每个人都有可能站1-6 这 6 个位置 if(j in di)and not(j in s)then begin j不在 di 中,则表明第 i 号人不能站j 位.j 如在 s 集合中,表明 j 位已排人了 ai:=j;第 i 人可以站j 位 if i6 then try(i+1,s+j)未安排妥,则继续排下去 else output;6个人都安排完,则输出 end;end;end;begin for i:=1 to 6 do di:=1.6-i;每个人的站位都与球衣的号码不同 d1:=d1-1,5,6;d6:=d6-1,5,6;1,6号队员不在后排
16、d2:=d2-2,5;d3:=d3-2,5;2,3号队员不是二传手 d5:=d5-3,6;d6:=d6-3,6;5,6号队员不是副攻手 try(1,);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 40 页 -end.【题目】把自然数分解为若干个自然数之和。【参考答案】n total 5 7 6 11 7 15 10 42 100 190569291【参考程序】var n:byte;num:array0.255 of byte;total:word;procedure output(dep:byte);var j:byte;begin for j:=1 to dep do wr
17、ite(numj:3);writeln;inc(total);end;procedure find(n,dep:byte);N:待分解的数,DEP:深度 var i,j,rest:byte;begin for i:=1 to n do 每一位从 N 到 1 去试 if numdep-10)then begin find(rest,dep+1);end else if rest=0 then output(dep);刚好相等则输出 numdep:=0;end;end;begin 主程序 writeln(input n:);readln(n);名师资料总结-精品资料欢迎下载-名师精心整理-第 6
18、页,共 40 页 -fillchar(num,sizeof(num),0);total:=0;num0:=0;find(n,1);writeln(sum=,total);end.【题目】把自然数分解为若干个自然数之积。【参考程序】var path:array1.1000 of integer;total,n:integer;procedure find(k,sum,dep:integer);K:var b,d:Integer;begin if sum=n then 积等于 N begin write(n,=,path1);for d:=2 to dep-1 do write(*,pathd);
19、writeln;inc(total);exit;end;if sumn then exit;累积大于 N for b:=trunc(n/sum)+1 downto k do 每一种可能都去试 begin pathdep:=b;find(b,sum*b,dep+1);end;end;begin readln(n);total:=0;find(2,1,1);writeln(total:,total);readln;end.【题目】马的遍历问题。在的棋盘中,马只能走日字。马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。名师资料总结-精品资料欢迎下载-名师精心整理-第 7
20、页,共 40 页 -【参考程序】深度优先搜索法 const n=5;m=4;fx:array1.8,1.2of-2.2=(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1),(-2,1),(-1,2);八个方向增量 var dep,i:byte;x,y:byte;cont:integer;统计总数 a:array1.n,1.mof byte;记录走法数组 procedure output;输出,并统计总数 var x,y:byte;begin cont:=cont+1;writeln;writeln(count=,cont);for y:=1 to n do be
21、gin for x:=1 to m do write(ay,x:3);writeln;end;readln;halt;end;procedure find(y,x,dep:byte);var i,xx,yy:integer;begin for i:=1 to 8 do begin xx:=x+fxi,1;yy:=y+fxi,2;加上方向增量,形成新的坐标 if(xx in 1.m)and(yy in 1.n)and(ayy,xx=0)then 判断新坐标是否出界,是否已走过?begin ayy,xx:=dep;走向新的坐标 if(dep=n*m)then output else find(yy
22、,xx,dep+1);从新坐标出发,递归下一层 ayy,xx:=0 回溯,恢复未走标志 end;end;end;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 40 页 -begin cont:=0;fillchar(a,sizeof(a),0);dep:=1;writeln(input y,x);readln(y,x);x:=1;y:=1;if(yn)or(xm)then begin writeln(x,y error!);halt;end;ay,x:=1;find(y,x,2);if cont=0 then writeln(No answer!)else write(The
23、End!);readln;end.【题目】加法分式分解。如:1/2=1/4+1/4.找出所有方案。输入:为要分解的分数的分母为分解成多少项【参考程序】program fenshifenjie;const nums=5;var t,m,dep:integer;n,maxold,max,j:longint;path:array0.nums of longint;maxok,p:boolean;sum,sum2:real;procedure print;var i:integer;begin t:=t+1;if maxok=true then begin maxold:=pathm;maxok:=f
24、alse;end;write(NO.,t);for i:=1 to m do write(,pathi:4);writeln;if path1=pathm then begin writeln(Ok!total:,t:4);readln;halt;end;end;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 40 页 -procedure input;begin writeln(input N:);readln(n);writeln(input M(M=,nums:1,):);readln(m);if(n=0)or(m4)or(nmaxlongint)then begin wr
25、iteln(Invalid Input!);readln;halt;end;end;function sum1(ab:integer):real;var a,b,c,d,s1,s2:real;i:integer;begin if ab=1 then sum1:=1/path1 else begin a:=path1;b:=1 ;c:=path2;d:=1;for i:=1 to ab-1 do begin s2:=(c*b+a*d);s1:=(a*c);a:=s1;b:=s2;c:=pathi+2;end;sum1:=s2/s1;end;end;procedure back;begin 名师资
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广度优先搜索和深度优先搜索训练题 2022 广度 优先 搜索 深度 训练
限制150内