用c语言拼图编程程序,或者算法

3x3的正方形的拼图游戏23465178如何变为12345678我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编... 3x3的正方形的拼图游戏
2 3
4 6 5
1 7 8
如何变为
1 2 3
4 5 6
7 8
我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编一下程序,分数可以加倍的,谢谢啦~~
展开
 我来答
百度网友d920da4
推荐于2017-12-16 · TA获得超过255个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:147万
展开全部

你好,我写了一个C++的,在VS上完美运行,希望能够帮到你。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>

/*定义全局变量*/
int puzz[9]; // 九格游戏数组
int i=0,j,k; // i 初始化界面的提示语,j 获取空格位置,k 移动次数
int space; // 空缺位置

/*自定义函数原型*/
void interface(); // 界面,包括打印充填矩形和数字
void change(int a,int b); // 交换
void press(); // 按键
void start() ; // 初始化和判断是否胜利

void start() // 初始化和判断是否胜利
{
int a,b,c;
int star[22]={300,120,320,160,360,160,320,200,340,240,300,200,260,240,280,200,240,160,280,160,300,120};

k=0;
for(a=0;a<8;a++)
puzz[a]=a+1;
puzz[8]=0;

interface();
for(c=0;c<100;c++)  // 随机打乱顺序
{
a=rand()%9;
b=(a+2)%8;  // 关于有无解问题,搞不清楚,引用的

change(a,b);
}

while(1)
{
interface();

for(a=0;a<8;a++)
if(puzz[a]!=a+1)
break;
if(a==8)
{
drawpoly(11,star); // 五角星
setcolor(1); // 文本“SUCCESSFUL”颜色
setfillstyle(1,4); // 五角星填充色
floodfill(300,150,15); // 五角星内一点
outtextxy(260,180,"SUCCESSFUL!!");
getch();
start();
}
for(j=0;j<=8;j++)
if (puzz[j]==0)
break;
space=j;

press();
}
}
void interface() // 界面,包括打印充填矩形和数字
{

clearviewport(); // 清楚屏幕图形
setbkcolor(6); // 设置背景色
setfillstyle(2,2); // 矩形块颜色

if(puzz[0]!=0)
bar(160,60,240,140);
if(puzz[1]!=0)
bar(260,60,340,140);
if(puzz[2]!=0)
bar(360,60,440,140);
if(puzz[3]!=0)
bar(160,160,240,240);
if(puzz[4]!=0)
bar(260,160,340,240);
if(puzz[5]!=0)
bar(360,160,440,240);
if(puzz[6]!=0)
bar(160,260,240,340);
if(puzz[7]!=0)
bar(260,260,340,340);
if(puzz[8]!=0)
bar(360,260,440,340);

gotoxy(25,7);
if(puzz[0]!=0)
printf("%d",puzz[0]);
gotoxy(38,7);
if(puzz[1]!=0)
printf("%d",puzz[1]);
gotoxy(50,7);
if(puzz[2]!=0)
printf("%d",puzz[2]);
gotoxy(25,13);
if(puzz[3]!=0)
printf("%d",puzz[3]);
gotoxy(38,13);
if(puzz[4]!=0)
printf("%d",puzz[4]);
gotoxy(50,13);
if(puzz[5]!=0)
printf("%d",puzz[5]);
gotoxy(25,19);
if(puzz[6]!=0)
printf("%d",puzz[6]);
gotoxy(38,19);
if(puzz[7]!=0)
printf("%d",puzz[7]);
gotoxy(50,19);
if(puzz[8]!=0)
printf("%d",puzz[8]);

if(i==0)
{
printf("\n\n\n\n\n\t\tPress any key to dare ");
getch();
}
gotoxy(60,4); // 打印移动次数
printf("%d th",k);
i+=1;

return;
}
int main()
{
int gdriver=VGA,gmode=VGAHI;
initgraph(&gdriver,&gmode,"c:\\tc30\\BGI");
srand((unsigned)time(NULL)); // 播种子
clearviewport(); // 清屏

printf("\n\n\t\t\t/////////////////////////////\n");
printf("\n");
printf("\t\t\t\tPUZZLE GAME\n");
printf("\n");
printf("\t\t\t/////////////////////////////\n");
printf("\n\n\n\n\n\n\tPress any key to start game");
printf("\n\n\tPress Esc to exit\n\n\t");

if(getch()==27)
{
clrscr();
clearviewport();
printf("\n\n\n\t\t\t//////////////////////////////////\n");
printf("\n\t\t\t\tSee you next time\n");
printf("\n\t\t\t//////////////////////////////////\n");
printf("\n\n\n\n\n\t\t\tPress any key to exit ");
getch();
closegraph();
return 0;
}

start();

return 0;

}
更多追问追答
追问

 找不到函数drawpoly



前辈,您用的是哪个工程,我建立的普通的工程,报错

追答
嗯,可能是编译器的问题吧!
liruih8121099
游戏玩家

2014-09-30 · 游戏我都懂点儿,问我就对了
知道小有建树答主
回答量:561
采纳率:75%
帮助的人:174万
展开全部
广度优先搜索吧,冒泡的果断真大神啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-09-30
展开全部
先排序,然后每输出三个换行
追问
我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编一下程序,分数可以加倍的,谢谢啦~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-09-30
展开全部
冒泡排序 不解释
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式