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
1example output4
1 2 3 4hint12 13 14 5
11 16 15 6
10 9 8 7
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的整數 同樣...