樓上的程序太麻煩,效率低【騎士游歷問題】 設(shè)有一個(gè)m×n的棋盤(2≤m≤50,2≤n≤50),在棋盤上任一點(diǎn)有一個(gè)中國象棋“馬”,馬走的規(guī)則為:馬走日字;馬只能向右走。當(dāng)m,n給出后,同時(shí)給出馬起始的位置和終點(diǎn)的位置,試找出從起點(diǎn)到終點(diǎn)所有路徑的數(shù)目。輸入: m,n,x1,y1,x2,y2 (分別表示m,n、起點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo))輸出: 路徑數(shù)目(若不存在,則輸出0)【分析】 本題可以使用深度搜索發(fā)求解,但是效率很低,當(dāng)路徑很多時(shí),不可能在短時(shí)間內(nèi)出解??梢圆捎脛?dòng)態(tài)規(guī)劃的設(shè)計(jì)思想。(專為樓下設(shè)計(jì)) 從(x1,y1)位置出發(fā),按照由左到右的順序定義階段的方向。位于(x2,y2)的左方且可達(dá)(x2,y2)的跳馬位置集合都是(x2,y2)的子問題,起點(diǎn)至(x2,y2)的路徑數(shù)實(shí)際上等于起點(diǎn)至這些位置集的路徑數(shù)之和??梢园凑针A段的順序依次計(jì)算每一個(gè)階段每個(gè)點(diǎn)的路徑數(shù)目。 階段i:中國象棋馬當(dāng)前的列位置(x1≤i≤x2) 狀態(tài)j:中國象棋馬在i列的行位置(1≤i≤m) 狀態(tài)轉(zhuǎn)移方程map[i,j]:起點(diǎn)(x1,y1)至(i,j)的路徑數(shù)目附標(biāo)程:const maxm=50; maxn=50;var m,n,x1,y1,x2,y2:integer; i,j,k,x,y:integer; map:array[-2..maxm+2,-2..maxn+2] of extended;beginfillchar(map,sizeof(map),0);readln(m,n,x1,y1,x2,y2);map[x1,y1]:=1;for i:=x1+1 to x2 do for j:=1 to m do map[i,j]:=map[i-1,j-2]+map[i-1,j+2]+map[i-2,j-1]+map[i-2,j+1];writeln(map[x2,y2]:0:0);end. 搜索比較慢,有代碼如下:program p7_1;const dx:array[1..8] of integer=(1,-1,-2,-2,-1,1,2,2); dy:array[1..8] of integer=(2,2,-1,-1,-2,-2,-1,1);var board:array[-1..7,-1..7] of integer; t,i,j,a,b:integer;procedure search(t,x,y:integer);var p,m,n:integer;begin if t=26 then begin for m:=1 to 5 do begin for n:=1 to 5 do write(board[m,n]:3); writeln; end; t:=-1; halt end; if board[x,y]=0 then begin board[x,y]:=t;inc(t); for p:=1 to 8 do search(t,x+dx[p],y+dy[p]); board[x,y]:=0; end;end;begin t:=1; for i:=-1 to 7 do for j:=-1 to 7 do board[i,j]:=-1; for a:=1 to 5 do for b:=1 to 5 do board[a,b]:=0; search(t,1,1); if t-1 then write('Wrong!');end.
創(chuàng)新互聯(lián)建站基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)遂寧托管服務(wù)器報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
沒做過,看過?!膀T士總是移向具有最少出口且沒有到達(dá)過的方格之一”是說,它可移動(dòng)的位置有N個(gè),在這N個(gè)中,尋找下一次可移動(dòng)的位置最少的那個(gè),做為騎士要去的點(diǎn)的位置。這是一種貪婪法,有的位置有解但你卻求不出來。
樓上的程序太麻煩,效率低
【騎士游歷問題】
設(shè)有一個(gè)m×n的棋盤(2≤m≤50,2≤n≤50),在棋盤上任一點(diǎn)有一個(gè)中國象棋“馬”,馬走的規(guī)則為:馬走日字;馬只能向右走。當(dāng)m,n給出后,同時(shí)給出馬起始的位置和終點(diǎn)的位置,試找出從起點(diǎn)到終點(diǎn)所有路徑的數(shù)目。
輸入:
m,n,x1,y1,x2,y2 (分別表示m,n、起點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo))
輸出:
路徑數(shù)目(若不存在,則輸出0)
【分析】
本題可以使用深度搜索發(fā)求解,但是效率很低,當(dāng)路徑很多時(shí),不可能在短時(shí)間內(nèi)出解??梢圆捎脛?dòng)態(tài)規(guī)劃的設(shè)計(jì)思想。(專為樓下設(shè)計(jì))
從(x1,y1)位置出發(fā),按照由左到右的順序定義階段的方向。位于(x2,y2)的左方且可達(dá)(x2,y2)的跳馬位置集合都是(x2,y2)的子問題,起點(diǎn)至(x2,y2)的路徑數(shù)實(shí)際上等于起點(diǎn)至這些位置集的路徑數(shù)之和??梢园凑针A段的順序依次計(jì)算每一個(gè)階段每個(gè)點(diǎn)的路徑數(shù)目。
階段i:中國象棋馬當(dāng)前的列位置(x1≤i≤x2)
狀態(tài)j:中國象棋馬在i列的行位置(1≤i≤m)
狀態(tài)轉(zhuǎn)移方程map[i,j]:起點(diǎn)(x1,y1)至(i,j)的路徑數(shù)目
附標(biāo)程:
const
maxm=50;
maxn=50;
var
m,n,x1,y1,x2,y2:integer;
i,j,k,x,y:integer;
map:array[-2..maxm+2,-2..maxn+2] of extended;
begin
fillchar(map,sizeof(map),0);
readln(m,n,x1,y1,x2,y2);
map[x1,y1]:=1;
for i:=x1+1 to x2 do
for j:=1 to m do
map[i,j]:=map[i-1,j-2]+map[i-1,j+2]+map[i-2,j-1]+map[i-2,j+1];
writeln(map[x2,y2]:0:0);
end.
搜索比較慢,有代碼如下:
program p7_1;
const dx:array[1..8] of integer=(1,-1,-2,-2,-1,1,2,2);
dy:array[1..8] of integer=(2,2,-1,-1,-2,-2,-1,1);
var board:array[-1..7,-1..7] of integer;
t,i,j,a,b:integer;
procedure search(t,x,y:integer);
var p,m,n:integer;
begin
if t=26 then begin
for m:=1 to 5 do begin
for n:=1 to 5 do write(board[m,n]:3);
writeln;
end;
t:=-1;
halt
end;
if board[x,y]=0 then begin
board[x,y]:=t;inc(t);
for p:=1 to 8 do search(t,x+dx[p],y+dy[p]);
board[x,y]:=0;
end;
end;
begin
t:=1;
for i:=-1 to 7 do
for j:=-1 to 7 do board[i,j]:=-1;
for a:=1 to 5 do
for b:=1 to 5 do board[a,b]:=0;
search(t,1,1);
if t-1 then write('Wrong!');
end.
新聞名稱:騎士巡游java代碼 騎士源碼
本文地址:http://jinyejixie.com/article46/dopjjhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、定制網(wǎng)站、用戶體驗(yàn)、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)