馬攔過河卒

2021-07-26 01:09:55 字數 1359 閱讀 6436

time limit: 1000ms

memory limit: 65536kb

submit

statistic

discuss

problem description

n×n的螺旋方陣當n=5和n=3時分別是如下的形式

請給出乙個程式,對於任意的輸入n(0<n<11),輸出按照上面規律所獲得的n×n的螺旋方陣。

input

輸入第一行為整數m(0<m<10),代表有m組輸入;

接下來是m行資料,每行輸入乙個n(0<n<11)。

output

按照輸入的次序,依次輸出每乙個n×n方陣(乙個方陣的同一行資料之間以'\t'分隔)

兩個輸出方陣之間輸出乙個空行。

example input

1

4

example output

1   2   3   4

12  13  14  5

11  16  15  6

10 9  8   7

hint

author

要到達棋盤上的任意一點,只能從上邊和左邊兩個方向來。因此,到達某一點的路徑數,等於它相鄰的左上兩個點的路徑數和:f[i][j]=f[i-1][j]+f[i][j-1]所以我們可以使用逐列(或逐行)遞推的方法來求出從起始頂點到重點的路徑數目,即使有障礙(我們將馬的控制點稱為障礙),這一方法也完全適用,只要將到達該點的路徑數目置為0即可,用f[i,j]表示到達點(i,j)的路徑數目,g[i,j]表示點(i, j)有無障礙,遞推方程如下:

f[0,0] = 1 

//起點

f[i,0] = f[i-1,0]        //左邊界

f[0,j] = f[0,j-1]        //上邊界

f[i,j] = 0             

//障礙點

f[i,j] = f[i-1,j] + f[i,j-1]  //遞推式

#include#include#includeusing namespace std;

int dx[8] = ;

int dy[8] = ;

int map[23][23];

int f[30][30];

int main()

map[x][y]=0;

for(i=0;i<8;i++)

for(i=0;i<=n;i++)

for(j=0;j<=m;j++)

for(i=1;i<=21;i++)

for(j=1;j<=21;j++)

printf("%d\n",f[n][m]);

}

馬攔過河卒

問題描述 棋盤上a 點有乙個過河卒,需要走到目標 b點。卒行走的規則 可以向下 或者向右。同時在棋盤上 c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a 點 0,0 b 點 n,m n,m為不超過 15的整數 同樣馬的位置座標是需要...

馬攔過河卒

如圖,a點有乙個過河卒,需要走到目標 b點。卒行走規則 可以向下 或者向右。同時在棋盤上的任一點有乙個對方的馬 如上圖的c點 該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。例如上圖 c點上的馬可以控制 9個點 圖中的p1,p2 p8和 c 卒不能通過對方馬的控制點。棋盤用座標表示,a點 0,...

馬攔過河卒

problem description 棋盤上a點有乙個過河卒,需要走到目標b點。卒行走的規則 可以向下 或者向右。同時在棋盤上c點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為 馬攔過河卒 棋盤用座標表示,a點 0,0 b點 n,m n,m為不超過15的整數 同樣...