📄 c7_401.txt
字号:
int base[9][3]={0, 0, 0, /* 从起跳点求落脚点的基础系数数组 */
0, 1, 2,
0, 2, 1,
0, 2,-1,
0, 1,-2,
0,-1,-2,
0,-2,-1,
0,-2, 1,
0,-1, 2 };
main()
{ int a[9][9],object[9][9];
int i,j,k,p,x,y,m,n,cont;
int min,rm1,rm2,rm0=1;
for(cont=1;cont>0;)
{ for(i=0;i<=8;i++) /* 保存个点度数的数组 清零 */
for(j=0;j<=8;j++)
a[i][j]=0;
rm1=base[1][1]; /* 改变基础数组元素排列顺序 */
rm2=base[1][2];
base[1][1]=base[rm0][1];
base[1][2]=base[rm0][2];
base[rm0][1]= rm1;
base[rm0][2]= rm2;
for(i=1;i<=8;i++)
{ for(j=1;j<=8;j++) /* 计算各点度数存入数组a */
{ for(p=1;p<=8;p++)
{ x=i+base[p][1];
y=j+base[p][2];
if(x>=1&&x<=8&&y>=1&&y<=8)
a[x][y]++;
}
printf(" %d",a[i][j]); /* 输出度数表 */
}
printf("\n");
}
printf("Please Input start position:line,colume=?\n");
scanf("%d,%d",&i,&j); /* 输入起跳点坐标 */
for(k=1;k<=63;k++) /* 求棋盘上63个落步点 */
{ object[i][j]=k; /* 跳步路径存入数组object */
min=10;
for(p=1;p<=8;p++) /* 求从当前起跳点出发的8个可能落点 */
{ x=i+base[p][1];
y=j+base[p][2];
if(x>=1&&x<=8&&y>=1&&y<=8) /* 求出的可能落点在棋盘内 */
if(a[x][y]!=0) /* 此点没有落过棋子 */
{ a[x][y]--; /* 由于[i、j]点落过棋子,此点度数减1 */
if(min>a[x][y]) /* 判断当前可能点度数是否最小 */
{ min=a[x][y]; /* 保存可能最小度数点的度数 */
m=x; /* 保存可能最小度数点的坐标 */
n=y;
}
}
}
a[i][j]=0; /* 落过棋子的[i、j]点度数为零 */
i=m; /* 已求出的最小度数点为下次搜寻的起跳点 */
j=n;
}
object[i][j] = 64 ;
for(i=1;i<=8;++i) /* 输出跳步结果路径 */
{ for(j=1;j<=8;j++)
if(j==8) printf("%2d",object[i][j]);
else printf("%2d ",object[i][j]);
printf("\n");
if(i!=8) printf(" \n"); /* 每行输出8个数据 */
}
rm0%=8; /* 放在基础数组第一位的元素循环变化 */
rm0++; /* 基础数组下一元素放在第一位 */
printf("continue?(1 or 0)");
scanf("%d",&cont);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -