数字移动

图中的九个点上,空出中间的点,其余的点上任意填入数字1到8;1的位置固定不动,然后移动其余的数字,使1到8顺时针从小到大排列.移动的规律是:只能将数字沿线移向空白的点.


#include<stdio.h> 
int a[]={0,1,2,5,8,7,6,3}; /*指针数组.依次存入矩阵中构成环的元素下标*/ 
int b[9]; /*表示3X3矩阵,b[4]为空格*/ 
int c[9]; /*确定1所在的位置后,对环进行调整的指针数组*/ 
int count=0; /*数字移动步数计数器*/ 
int main() 
{  
	int i,j,k,t; 
	void print(); 
	printf("Please enter original order of digits 1~8:"); 
	for(i=0;i<8;i++) 
	scanf("%d",&b[a[i>); /*顺序输入矩阵外边的8个数字,矩阵元素的顺序由指针数组的元素a[i]控制*/ 
	printf("The sorting process is as felow:\n"); 
	print(); 
	for(t=-1,j=0;j<8&&t==-1;j++) /*确定数字1所在的位置*/ 
	if(b[a[j>==1) 
	t=j; /*t:记录数字1所在的位置*/  
	for(j=0;j<8;j++) /*调整环的指针数组,将数字1所在的位置定为环的首*/ 
	{
		c[j]=a[(j+t)%8]; 
		for(i=2;i<9;i++)
		{ /*从2开始依次调整数字的位置*/ /*i:正在处理的数字,i对应在环中应当的正确位置就是i-1*/ 
			for(j=i-1;j<8;j++) /*从i应处的正确位置开始顺序查找*/ 
			{	
				if(b[c[j>==i&&j!=i-1) /*若i不在正确的位置*/ 
				{ 
					b[4]=i; /*将i移到中心的空格中*/ 
					b[c[j>=0;
					print(); /*空出i原来所在的位置,输出*/ 
					for(k=j;k!=i-1;k–) /*将空格以前到i的正确位置之间的数字依次向后移动一格*/ 
					{ 
						b[c[k>=b[c[k-1>; /*数字向后移动*/ 
						b[c[k-1>=0; 
						print(); 
					} 
					b[c[k>=i; /*将中间的数字i移入正确的位置*/ 
					b[4]=0; /*空出中间的空格*/ 
					print(); 
					break; 
				} 
				else if(b[c[j>==i) 
				break;
			}
		} /*数字i在正确的位置*/
	} 
}
 
void print(void) /*按格式要求输出矩阵*/ 
{ 
	int c; 
	for(c=0;c<9;c++) 
	if(c%3==2) 
	printf("%2d ",b[c]); 
	else printf("%2d",b[c]); 
	printf("—-%2d—-\n",count++); 
}







  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值