-
如果你願意,請留下一封電子郵件,我會把它發給你。
-
動態規劃。 動態方程:f[,j-2] 或 f[i-2,j-1](請注意,它是乙個布林值! )
-
雖然輸入不同。
但是你可以改變它,標題的**。
constmaxm=50;
maxn=50;
varm,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.
-
騎士之旅(帕斯卡)。
有乙個n*m(2<=n<=50,2<=m<=50)的棋盤,棋盤上任意一點都有一匹中國棋馬,馬移動的規則是:1騎馬日本角色2馬只能向右走。
任務:當給出n和m時,同時給出馬的起點位置和終點的位置,並嘗試找到從起點到終點的所有路徑的個數。 例如:(n=10, m=10)、(1,5)(開始)、(3,5)(結束)。
輸出:2(即從 (1,5) 到 (3,5) 的 2 條路徑)。
輸入格式:n、m、x1、y1、x2、y2(分別表示n、m、起始坐標、結束坐標)。
輸出格式:路徑數(如果從開始到結束不存在路徑,則為 0)。
從 (x1,y1) 位置開始,按從左到右的順序定義階段的方向。 (x2,y2) 到 (x2,y2) 左邊的金庫位置集都是 (x2,y2) 的子問題,從起點到 (x2,y2) 的路徑數實際上等於從起點到這些位置集的路徑數之和。 您可以按階段順序計算每個階段中每個點的路徑數。
第一階段:中國棋馬的當前列位置(x1 i x2)。
狀態 J:中國棋馬在第 i 列 (1 i m) 行中的位置。
狀態轉移方程對映[i,j]:從起點(x1,y1)到(i,j)的路徑數。
具體演算法如下:
fillchar(map,sizeof(map),0);
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]);
參考程式】程式 qishiyouli;
constmaxm=50;
maxn=50;
varm,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.
-
揉搓經驗。
揉搓經驗。 揉搓經驗。
揉搓經驗。 揉搓經驗。
-
如果你要求所有的解決方案,你必須測試 4 36= 種,而且計算機太忙了。
-
標題的描述不夠詳細。
問題出在輸出方面。
如果板左上角的坐標是(1,1),右下角的坐標是(n,m),則dfs(0,0,0); 更改為 DFS(1,1,0);
writeln('(xy[j,1],'xy[j,2],'更改為 writeln('(xy[j,1],'m-xy[j,2]+1,')
writeln('(n,' m,') 到 writeln('(n,' 1,')
-
問題:棋盤,n*m,要求:
馬走路的規則是:1騎馬日本角色2馬只能向右走。
輸入 n 和 m 後,找到從左下角到右上角的路徑。
回覆:其實你的程式很好,經過多次除錯,它一直都是正確的。 在我們的固定思維中,棋盤上的第乙個方格是 (0,0),但如果問題有特殊規則,那麼就遵循規則。 你也一樣。
以上是我的回覆,請決定。
-
這是一種經典的回溯型別,網際網絡上有很多解決方案,您可以檢視一下。
-
這一切都是可能的,但是在修改程式時,有一件事是你不會改變的。
program aaa;
constn=8; nsq=n*n;
typeindex=1..n;
vari,j:index;
q:boolean;
a:array[1..2,1..8]of integer;
b:array[1..n,1..n]of integer;
procedure try(x,y:index;i:integer;var q:boolean);
vark,u,v:integer;
q1:boolean;
begink:=0;
repeat
k:=k+1;
q1:=false;
u:=x+a[1,k];
v:=y+a[2,k];
if (u>=1) and (u<=n) and(v>=1) and(v<=n) then
if b[u,v]=0 then
beginb[u,v]:=i;
if ibegin
try(u,v,i+1,q1);
if not q1 then b[u,v]:=0;
endelse q1:=true;
end;until q1 or(k=8);
q:=q1;
end;begin
a[1,1]:=-1;a[1,2]:=-2;a[1,3]:
2;a[1,4]:=-1;a[1,5]:=1;a[1,6]:
2;a[1,7]:=2;a[1,8]:=1;
a[2,1]:=2;a[2,2]:=1;a[2,3]:
1;a[2,4]:=-2;a[2,5]:=-2;a[2,6]:
1;a[2,7]:=1;a[2,8]:=2;
for i:=1 to n do
for j:=1 to n do
b[i,j]:=0;
b[1,1]:=1;
try(1,1,2,q);
if q then
for i:=1 to n do
beginfor j:=1 to n do
write(b[i,j]:5);
writeln;
endelse writeln('no solution!');
end.
-
if (x[j,1]+a[i,1]< n) and (x[j,2]+a[i,2]< m) and (x[j,1]+a[i,1]>=0) and (x[j,2]+a[i,2]>=0) then
如果 (x[j,1]+a[i,1]<=n) 和 (x[j,2]+a[i,2]<=m) 和 (x[j,1]+a[i,1]>=0) 和 (x[j,2]+a[i,2]>=0) 那麼
如果它不相等,那麼它將無法達到。
-
騎士旅行一直由RP來評判。
我還不如再補一遍,我能做到,第一次是對的,第二次是錯的,第三次是對的......
-
1. 有條件判斷 2.陣列突發堆疊。
當然,無論是在語法上還是在功能上,但實際上......C的應用比Pascal強大多了,如果你想學習的話建議你先學習Pascal,然後再學習C
含義:1.遊覽; 漫遊。
引自:Manan Chuen 《燕山夜談:從惠神的國籍出發》:“只有當他前往美洲時,那片大陸的人們才有機會接觸到佛教。 ” >>>More
Pascal編譯系統是乙個系統軟體。 Pascal 是第一種結構化程式設計語言,具有嚴格的語法、清晰的層次結構、易於編寫和可讀的程式。 Pascal語言廣泛應用於各種軟體中,程式分為名稱(程式後自提)、設定(var後定義)、開始(begin)、程式(body)、read(讀read ln)、結束(end),結構層次分明,嚴謹嚴密。 >>>More