用C语言编程实现九宫问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 10:56:42
在一个3×3的九宫格中有1——8这8个数字及一个空格(下面0代表空格)随机地摆放在其中的格子里,用C语言或C++编程将该九宫格由初始图调整为结果图,每次只能将与空格相邻的一个数字平移到空格中。
下面的问题用0代表空格。
初始图为:
2 3 7
1 8 6
5 0 4
结果为:
1 2 3
8 0 4
7 6 5
本人急用,望各位仁兄鼎力相助,本人不胜感激!

输入方法:
例如:
input(从键盘):
1 2 3 7 4 5 8 0 6
output(向屏幕):
Step:1
1 2 3
4 5 6
7 8 0
Step:2
1 2 3
4 5 0
7 8 6
Step:3
1 2 3
4 0 5
7 8 6
Step:4
1 2 3
0 4 5
7 8 6
Step:5
1 2 3
7 4 5
0 8 6
Step:6
1 2 3
7 4 5
8 0 6
我的程序:
#include <stdio.h>
#include <math.h>
#include <CONIO.h>
struct bsm
{
int s[9];
int prep,pos;
} ar1[1000],ar2[1000];
int h1,r1,h2,r2,step;
struct bsm p;
int pd(int k)
{
int i,j,b1,b2;
b1=1;
p.s[p.pos+k]=p.s[p.pos]+p.s[p.pos+k];
p.s[p.pos]=p.s[p.pos+k]-p.s[p.pos];
p.s[p.pos+k]=p.s[p.pos+k]-p.s[p.pos];
p.pos=p.pos+k;
for (i=0;i<=r1;i++)
{
b2=0;
for (j=0;j<9;j++)
if (!(ar1[i].s[j]==p.s[j])) b2=1;
b1=b1*b2;
}
return(b1);
}