Pascal跳馬遍歷問題

2025-03-26 16:55:14 字數 4702 閱讀 1882

1樓:網友

嗯,既然你都知道用bfs了,那證明你也對它有所掌握。

其實,你可稿李簡以這樣處理,棋盤的邊界,你可以在原棋盤的外圍再加上一圈邊界,用個二維的布林型陣列變數來模擬棋盤情況,而那些有障礙物的地方,也可以想邊界一樣標識出來。

然後就是bfs的實現,由於n最大隻有100,你可以直接開乙個100000的陣列作為佇列擾告,沒必鍵褲要用迴圈佇列搞複雜了。而且bfs的結果就是最優解,搜出來的結果就是答案。

兄弟,這下知道怎麼做了嗎?

pascal跳馬問題..

2樓:網友

畫外音:你需要**麼?有時間限制嗎?

高手幫忙看一下我的pascal跳馬程式

3樓:網友

問題一:1、檢查常量b、c陣列的資料是否有錯;2、回溯程式中確保每走一步都做了標記,返回時是否恢復標記。

問題二:1、因為馬永遠向右走,那幅圖馬第一步走到(2,y),那麼無論在怎麼走,x座標都不會小於二,因而不會走重複。所以沒有做標記的必要;

2、想像一下,用陣列表示點,如圖,兩個紅點的座標(3,3)(7,1),實際上也可以把他們看作是點。。。和綠點的座標是乙個道理。。

pascal高手請進!樹得遍歷問題

4樓:網友

其實我不知道 你的題目想表達點什麼。

我是按從左往右從上到下輸入樹的。

type...ptreedata=^ttreedata;

..ttreedata=record

..data:integer;

..left,right:ptreedata;

..end;

.//前。procedure walktree1(tree:ptreedata);

begin..if(tree<>nil) then

..begin

..writeln(tree^.data);

..walktree(tree^.left);

..walktree(tree^.right);

..end;

end;.中。procedure walktree2(tree:ptreedata);

begin..if(tree<>nil) then

..begin

..walktree(tree^.left);

..writeln(tree^.data);

..walktree(tree^.right);

..end;

end;後。

procedure walktree(tree:ptreedata);

begin..if (tree <>nil) then

..begin

..walktree(tree^.left);

..walktree(tree^.right);

..writeln(tree^.data);

..end;

end;. tree:ptreedata);;

..begin

..if tree=nil then.

..begin

..read(x);

..if x=0 then exit;

..new(p);

..tree^.data:=x;

..tree^.left:=nil;tree^.right:=nil;

..build(tree^.left);

..build(tree^.right);

..end;

..end;.

begin..buildtree(t);

.treewalk1(t);

.treewalk2(t);

.treewalk3(t);

end;

pascal問題

5樓:

10^5那麼小,廣度優先遍歷。

upgrade---

好吧說bfs算是我敷衍了。這個其實是spfa.這題其實可以看成圖論。

var k,t,x,y,head,tail:longint;

queue,distant:array[1..100010]of longint;

hash:array[1..100010]of boolean;

beginfor i:=1 to 100010 dodistant[i]:=1000000;

readln(x,y);

distant[x]:=0;

queue[1]:=x;

hash[x]:=true;

head:=0;

tail:=1;

repeat

inc(head);

hash[head]:=false;

k:=distant[queue[head]];

if(queue[head]=y)then beginwriteln(k);

break;

end;if(queue[head]>1)then begint:=queue[head]-1;

if(distant[t]>k+1)then begindistant[t]:=k+1;

if(not hash[t])then begininc(tail);

queue[tail]:=t;

hash[t]:=true;

end;end;

end;if(queue[head]<100000)then begint:=queue[head]+1;

if(distant[t]>k+1)then begindistant[t]:=k+1;

if(not hash[t])then begininc(tail);

queue[tail]:=t;

hash[t]:=true;

end;end;

end;if(queue[head]shl 1<=100000)then begin

t:=queue[head]shl 1;

if(distant[t]>k+1)then begindistant[t]:=k+1;

if(not hash[t])then begininc(tail);

queue[tail]:=t;

hash[t]:=true;

end;end;

end;until head=tail;

end.

6樓:網友

動態規劃毋庸置疑。

f[i,j]:=min

if i mod 2=0 then if f[i,j]>f[i div 2,j-1]+1 then f[i,j]:=f[i div 2,j-1]+1;

但這個n^2的程式會超時。想不出有什麼優化//f[i,j]是指第i個位置,在第j步的最短時間。

pascal問題

7樓:埌淶霳

10^5那麼小,廣度優先遍歷。

upgrade---

好吧說bfs算是我敷衍了。這個其實是spfa.這題其實可以看成圖論。

var k,t,x,y,head,tail:longint;

queue,distant:array[1..100010]of longint;

hash:array[1..100010]of boolean;

beginfor i:=1 to 100010 dodistant[i]:=1000000;

readln(x,y);

distant[x]:=0;

queue[1]:=x;

hash[x]:=true;

head:=0;

tail:=1;

repeat

inc(head);

hash[head]:=false;

k:=distant[queue[head]];

if(queue[head]=y)then beginwriteln(k);

break;

end;if(queue[head]>1)then begint:=queue[head]-1;

if(distant[t]>k+1)then begindistant[t]:=k+1;

if(not hash[t])then begininc(tail);

queue[tail]:=t;

hash[t]:=true;

end;end;

end;if(queue[head]<100000)then begint:=queue[head]+1;

if(distant[t]>k+1)then begindistant[t]:=k+1;

if(not hash[t])then begininc(tail);

queue[tail]:=t;

hash[t]:=true;

end;end;

end;if(queue[head]shl 1<=100000)then begin

t:=queue[head]shl 1;

if(distant[t]>k+1)then begindistant[t]:=k+1;

if(not hash[t])then begininc(tail);

queue[tail]:=t;

hash[t]:=true;

end;end;

end;until head=tail;

end.

1216跳馬問題

varn,m,x1,y1,x2,y2,i,j longint f array 2.502,2.502 of longint begin readln n,m readln x1,y1 f x1,y1 1 readln x2,y2 for i x1 1 to x2 do for j 1 to m do...

pascal 階乘問題,pascal乘積最大問題

請樓上注意題目描述,只求一位,根本不用高精度。另外,請同志們尊重提問者,認真作答,不要以一兩句話敷衍了事!ps 我是一樓。pascal乘積最大問題 我們一起來分析一下 設字串長度為n,乘號數為k,如果n ,k 時,有 n 種不同的乘法,當k 時,有c , 種乘法,既c k,n 種乘法,當n k稍微...

pascal 棋盤問題 搜尋演算法

你要的是方案還是方案數量。用迴圈並記錄,最後輸出。問題再詳細點,我方便給你做 可能要加上位運算優化。就不給了,我也沒有 棋盤覆蓋問題演算法,pree pascal,幫一下 下面乙個跟noip第十三屆的一模一樣。pascal 棋盤數問題 誰能幫我看下錯在 因為在x 中x是longint型的,可是有 所以...