pascal程式設計 回朔,pascal 回朔的方法

2023-09-12 12:03:46 字數 4564 閱讀 1777

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...