pascal 回朔的方法
1樓:匿名使用者
遞迴回溯法演算法框架。
procedure search(k:integer);/k表示路徑的深度。
beginif k=n+1 then (1)//路徑深度達n+1begin
輸出解 exit (2)
end; for i:=1 to 孩子結點的個數(3)begin
記錄結點資訊。
end; 注釋:
1)如果n不確定,這裡改成乙個判斷是否到達目標節點的方法。
2)如果只求乙個解,改為halt;
3)應該去掉不能導致解的葉子結點,也就是剪枝。
pascal 回朔
2樓:匿名使用者
不要用回溯法。
效率極低。要用動態規劃。
迷宮問題 回朔 pascal
3樓:a孤獨求敗
再說了,x,y,n,m是什麼?題目有要求讀入x,y,n,m嗎?沒有啊。
看來題目有問題,題目應該是。
設有乙個l*l方格的迷宮,入口和出口分別在(x,y)和(m,n),迷宮格仔中分別放有0和1,0表示可走,1表示不能走,迷宮走的規則如圖。當迷宮給出之後,找出所有從入口到出口的通路。
輸入:l l*l的迷宮。
x,y,m,n;
輸出:全部路徑。
你的程式應改為:
program ex1;
constdy:array[1..4]of integer=(0,1,0,-1);
dx:array[1..4]of integer=(1,0,-1,0);
var a,b:array[0..200,0..200]of integer;
i,j,k,l,m,n,s,x,y:integer;
procedure dfs(x,y:integer);
var x1,y1:integer;
beginfor i:=1 to 4 do begin
x1:=x+dx[i];
y1:=y+dy[i];
if (a[x1,y1]=0)and(b[x1,y1]=0) then begin b[x1,y1]:=1;
if (x1=m) and (y1=n) then s:=s+1 else begin dfs(x1,y1);b[x1,y1]:=0;end;
end;end;
end; begin
s:=0;readln(l);
for i:=1 to l do begin
for j:=1 to l do
read(a[i,j]);
readln;
end; readln(x,y);
readln(m,n);
fillchar(b,sizeof(b),0);
dfs(x,y);
writeln(s);
end. 應該沒問題了。
4樓:
貼個完整的題吧謝謝。
乙個pascal回朔題目
5樓:匿名使用者
var a:array[1..4,1..4] of boolean;
b:array[1..4] of integer;//每列的棋子數i,j:integer;
procedure main(depth:integer);
var i,j:integer;
beginif depth=5 then begin//輸出for i:=1 to 4 do beginfor j:=1 to 4 do
if a[i,j] then write('*else write('
writeln;
end;writeln;
exit;end;
for i:=1 to 3 do if b[i]<2 then begin
inc(b[i]);a[depth,i]:=true;
for j:=i+1 to 4 do if b[j]<2 then begin
inc(b[j]);a[depth,j]:=true;
main(depth+1);/回朔。
a[depth,j]:=false;dec(b[j]);
end;a[depth,i]:=false;dec(b[i]);
end;end;
beginfillchar(b,sizeof(b),0);
fillchar(a,sizeof(a),false);
main(1);
end.
程式設計!pascal!
6樓:匿名使用者
program gangguan;
var f_in,f_out:text;
num,i,j:integer;
max_l,min_d,max_bh:longint; /長度l,直徑d,編號bh;
guan:array[1..1000,1..3] of longint; /鋼管陣列用於儲存所有資料;
begin/以下是讀取檔案中的資料;
assign(f_in,''
reset(f_in);
readln(f_in,num);
for i:=1 to num do
for j:=1 to 3 do read(f_in,guan[i,j]);
close(f_in);
變數初始化;
max_l:=0;
min_d:=maxlongint;
max_bh:=0;
先找出最大長度;
for i:=1 to num do
if guan[i,1]>max_l then max_l:=guan[i,1];
比最大長度小的鋼管資料清零;
for i:=1 to num do
if guan[i,1]0) then min_d:=guan[i,2];
非最小直徑的鋼管資料清零;
for i:=1 to num do
if guan[i,2]>min_d then
beginguan[i,1]:=0;
guan[i,2]:=0;
guan[i,3]:=0;
end;/最後找最大編號;
for i:=1 to num do
if guan[i,3]>max_bh then max_bh:=guan[i,3];
非最大編號的清零;
for i:=1 to num do
if guan[i,3]beginguan[i,1]:=0;
guan[i,2]:=0;
guan[i,3]:=0;
end;/螢幕顯示篩選後者拿裂的鋼管資料;
for i:=1 to num do
writeln(guan[i,1]:4,guan[i,2]:3,guan[i,3]:10);
最大編號資料寫回檔案;
assign(f_out,''
rewrite(f_out);
writeln(f_out,max_bh);
close(f_out);
end. 附敏陸測試資料(儲存在首閉檔案中):
輸出為:457888215
7樓:孤煙若水
跟布林有關,說的再具體一點吧!謝。
回朔法的pascal題目 看看錯誤在哪兒 謝謝
8樓:匿名使用者
這個不能用回朔,會超時,要用遞推:
program liukevijos1121;
vara:array[-5..50,-5..50] of longint;
i,j,k,m,n,x,y:longint;
beginreadln(m,n,x,y);
a[x,y]:=1;
a[x-2,y-1]:=1;
a[x-2,y+1]:=1;
a[x-1,y-2]:=1;
a[x-1,y+2]:=1;
a[x+1,y+2]:=1;
a[x+1,y-2]:=1;
a[x+2,y+1]:=1;
a[x+2,y-1]:=1;
for i:=0 to n do
if a[0,i]=-1 then break else a[0,i]:=1;
for i:=0 to m do
if a[i,0]=-1 then break else a[i,0]:=1;
for i:=0 to n do
if a[0,i]=-1 then a[0,i]:=0;
for i:=0 to m do
if a[i,0]=-1 then a[i,0]:=0;
for i:=1 to m do
for j:=1 to n do
if a[i,j]=-1 then a[i,j]:=0 else a[i,j]:=a[i-1,j]+a[i,j-1];
writeln(a[m,n]);
end.
pascal中如何讀入一行資料,Pascal怎麼實現一行輸入N個數?
while not eoln do begin read a i end var a array 1.1000 of integer i integer begin while not eoln do begin i i 1 read a i end end.望採納 readln就是讀一行 直到 1...
在pascal中怎樣建立程式設計思想
請問您是要問什麼?這個問題過於大了.我是寫pascal的,覺得pascal一定要注意各個部分的統籌兼顧變數,過程,函式,呼叫庫,都是要注意協調的對於初學者,一定要認真除錯每個程式,明白自己為什麼對,為什麼錯最後附上一個pascal裡面的exit code 大全.我是寫fp的 1無效dos功能號 2檔...
X不大於Y且X為奇數pascal簡單程式設計
你好,該題用if好 程式如下 program xy varx,y integer begin readln y for x 1 to y do if x mod 2 1 then write x,end.祝你成功。用 if 語句 if x y and odd x then 或if x y and x...