用c语言拼图编程程序,或者算法
3x3的正方形的拼图游戏23465178如何变为12345678我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编...
3x3的正方形的拼图游戏
2 3
4 6 5
1 7 8
如何变为
1 2 3
4 5 6
7 8
我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编一下程序,分数可以加倍的,谢谢啦~~ 展开
2 3
4 6 5
1 7 8
如何变为
1 2 3
4 5 6
7 8
我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编一下程序,分数可以加倍的,谢谢啦~~ 展开
4个回答
展开全部
你好,我写了一个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;
}
展开全部
广度优先搜索吧,冒泡的果断真大神啊!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-30
展开全部
先排序,然后每输出三个换行
追问
我知道冒泡可以实现,现在这是拼图的,我想让编程输出每一步怎么移动,而不是单纯的从小到大顺序输出,麻烦大神编一下程序,分数可以加倍的,谢谢啦~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-30
展开全部
冒泡排序 不解释
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询