#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,j,num=0;
long long s[36][36];
for(i=0;i<=35;i++){
s[i][0]=1;
}
//s[1][1]=1;
//s[2][2]=2;
for(i=1;i<=35;i++){
for(j=1;j<=35;j++){
if(i==j)s[i][j]=s[i][j-1];
else s[i][j]=s[i-1][j]+s[i][j-1];
}
}
while(1){
scanf("%d",&n);
if(n==-1)break;
num++;
printf("%d %d %lld\n",num,n,2*s[n][n]);
}
return 0;
}将棋盘按对角线分成两半,只考虑其中右下部分。每个点都是从相邻的点来的,可以以(x,y)的形式表示出来,当x=y时该点只能与(x,y-1)相连,x!=y时则与(x-1,y)和(x,y-1)两点相连
本文介绍了一个使用C语言实现的算法,该算法通过构建一个矩阵来计算从左上到右下的所有可能路径数量,特别关注对角线分割后的右下半部分。路径的选择规则为仅能向下或向右移动。
466

被折叠的 条评论
为什么被折叠?



