当前位置:首页 » 操作系统 » 八拼图算法

八拼图算法

发布时间: 2023-01-21 16:09:36

Ⅰ 拼图游戏算法

我那个程序找不着了,我在那个帖子回了,你找一下。

这个算法应该是BFS,DFS你觉得。。。呵呵。。

BFS+hash

HASH选择排列数的康托展开。这样可以在2s内圆满解决。

(指2s预处理,然后应对所有的输入瞬间出解)

Ⅱ 八巧板的来历,什么是最正宗的八巧板,能拼成什么图

八巧板的来历

http://input.foruto.com/3sdm/zgsxwj.htm

立体八巧板立体八巧板是一种简单的立体积木玩具,由八块形状各异的立体几何图
形组成。由于八块设计巧妙,因此拼出的图形很有趣。
制法:八块板的形状见图一。可以发现,每块板实际是由4 个小立方体
组成的,只不过组合的方式不同罢了。因此,制作的时候,可以用木块或塑
料块,先制成大小一样的小立方体,然后按图一粘合起来就行。
玩法:立体八巧板的玩法是用它拼搭各种立体几何图形。拼法很多,现
介绍三种。
一、拼相似形:用全部8 块拼块,组成8 个大拼块,使它和每个小拼块
相似,因为用的是8 块,所以实际是放大8 倍。拼法见图二。必须说明的是,
每一种放大块的拼法不只一种,有的达几十种,有的甚至达上千种。这里介
绍的只是其中一种。
二、拼“双胞胎”:将8 块拼板分成两组,每组4 块。用这两组拼块分
别拼成两个立体图形。要求这两个立体图形完全相同或对称。它们的形状就
像一对双胞胎,所以我们称这种拼法为拼”双胞胎”。图三是拼出的4 对“双
胞胎”。
三、拼立体图形:用8 块拼板可以拼各种造型的图形,图四列出了一些
造型,它们分别是立体几何图形、建筑和物体造型。如楼房、台阶、纪念碑
等等。

Ⅲ 用8个三角形可以拼成什么图形

用8个三角形可以拼成一个大正方形。等腰三角形的顶角等于45⁰时,八个顶角可拼成360度,加上等腰且八个等腰三角形腰长相等底角顶点也两两重合就完成拼图。八个全等的等腰直角三角形可拼成一个大正方形。每二个可拼成一个小正方形,四个小正方形拼成一个大正方形。

角的概念预定义

角的定义有公共端点是两条射线组成的图形叫做角,其中这个公共端点是角的顶点,这两条射线是角的两条边。角的表示方法角可以用一个大写字母表示也可以用三个大写字母表示.其中顶点字母要写在中间,唯有在顶点处只有一个角的情况,才可用顶点处的一个字母来记这个角。

否则分不清这个字母究竟表示哪个角.角还可以用一个希腊字母(如∠α,∠β,∠γ、…)表示,或用阿拉伯数字(∠1,∠2…)表示。

Ⅳ 3*3 型的拼图界面。数字1~8 和一个空格。要实现能拼图功能~~大概的算法是怎样的!!

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

int main(void)
{
void swap(int *a,int *b); //子函数声明
int i,j,k,n,puzzle[81]={0},parity[81]={0}; //拼图数组和奇偶性数组
char ch; //用来记录拼图数组可以转换成顺序矩阵,还是逆序矩阵

printf("游戏说明\n");
printf("↑ :数字向上 ↓ :数字向下\n");
printf("← :数字向左 → :数字向右\n");
printf("Esc:退出程序 Space:重置矩阵\n");
printf("\n");
loop1:
printf("难度设置\nn:");
scanf("%d",&n);
loop2:
system("cls"); //清屏
srand((unsigned)time(NULL)); //动态获取数据
for(i=0;i<=n*n-1;i++)
{
loop3:
k=rand()%(n*n); //记录新的数据
for(j=0;j<i;j++) //和旧的数据进行比较,当新的数据
if(puzzle[j]==k) goto loop3; //出现过时,重新获取
if(j==i)
{
puzzle[j]=k; //当新的数据和旧的数据都不同时,将
} //数据放入拼图数组中
}
for(i=0;i<=n*n-1;i++)
{
parity[i]=puzzle[i]; //将拼图数组赋予奇偶性数组
}
for(i=0;i<=n*n-1;i++)
{
if(parity[i]==0) break; //找出奇偶性数组中0(空格)的位置
}
k=i;
for(j=1;j<=i/n;j++) //将0(空格)换到第1行
{
swap(&parity[k],&parity[k-n]);
k=k-n; //更新奇偶性数组中0(空格)的位置
}
for(j=1;j<=i%n;j++) //将0(空格)换到第1列
{
swap(&parity[k],&parity[k-1]);
k=k-1; //更新奇偶性数组中0(空格)的位置
}
k=0;
for(i=0;i<=n*n-1;i++)
for(j=i;j<=n*n-1;j++)
{
if(parity[i]>parity[j]) k++; //求奇偶性数组的“逆序数和”
}
if(k%2==0) printf("%d\n顺序矩阵",n),ch='0'; //“逆序数和”为偶数时,是顺序矩阵
else printf("%d\n逆序矩阵",n),ch='1'; //“逆序数和”为奇数时,是逆序矩阵
printf("\n");
for(i=0;i<=n*n-1;i++) //打印拼图数组
{
if(puzzle[i]==0) printf("%*c",n,' '); //是0(空格)的位置,打印空格
else printf("%-*d",n,puzzle[i]); //是数字的位置,打印对应宽度的数字
if((i+1)%n==0&&i!=n*n-1) printf("\n"); //每打印n个数字,换一行打印
}
while(1)
{
for(i=0;i<=n*n-1;i++)
{
if(puzzle[i]==0) break; //记录拼图数组中0(空格)的位置
}
switch(getch())
{
case 72:if( i<n*(n-1)) swap(&puzzle[i],&puzzle[i+n]);break; //数字向上
case 80:if( i>1*(n-1)) swap(&puzzle[i],&puzzle[i-n]);break; //数字向下
case 75:if((i+1)%n!=0) swap(&puzzle[i],&puzzle[i+1]);break; //数字向左
case 77:if((i+0)%n!=0) swap(&puzzle[i],&puzzle[i-1]);break; //数字向右
case 27:exit(0); //退出程序
case 32:goto loop2; //重置矩阵
}
system("cls"); //清屏
switch(ch)
{
case '0':printf("%d\n顺序矩阵\n",n);break; //完成拼图的最终目标
case '1':printf("%d\n逆序矩阵\n",n);break; //完成拼图的最终目标
}
for(i=0;i<=n*n-1;i++)
{
if(puzzle[i]==0) printf("%*c",n,' '); //是0(空格)的位置,打印空格
else printf("%-*d",n,puzzle[i]); //是数字的位置,打印对应宽度的数字
if((i+1)%n==0&&i!=n*n-1) printf("\n"); //每打印n个数字,换一行打印
}
for(i=0;i<=n*n-3;i++)
{
if(puzzle[i]!=i) break; //判断拼图数组是否为顺序矩阵或逆序矩阵
}
if(i==n*n-2)
{ //是顺序矩阵或是逆序矩阵时,完成拼图
printf("\n恭喜你,拼图完成了!\n"); //打印完成标志
printf("Continue(y/n)?");
if(getch()=='y')
{
system("cls"); //清屏
goto loop1; //重新开始
}
else
{
exit(0); //退出程序
}
}
}
getch(); //显示运行结果
return(0); //正常运行返回0
}

void swap(int *a,int *b)
{
int c;

c=*a;
*a=*b;
*b=c;
}

Ⅳ 拼图游戏的算法(推动的拼图)FLASH版

不一定只让一个方块移动,算法可以是先把一张图片分割好,为每个方块指定一个整形的数字。然后写一个方法,让i行j列的方块随机往一个方向移动。调用这个方法若干次,效果上就像你让人家玩魔方前,自己手工把它打乱。

数据结构方面,由于AS并不支持真正的多维数组,你可以用数组的数组来存放N*N的方块:
var num:Number=10;
var blocks:Array=new Array();
var count:Number=0;
for(var i:Number=0;i<num;i++){
var row:Array=new Array();
for(var j:Number=0;j<num;j++){
row.push(count++);
}
blocks.push(row);
}
function randomMove(rowIndex:Number,colIndex:Number){
..
}

Good Luck

Ⅵ 关于数字拼图的问题,什么算法可以找出最优的操作步骤数

先排好123,下面的只要排好65478的顺序顺时针转就好。

Ⅶ 拼图游戏算法分析

BFS算法。

队列初始化
Repeat
h=当前状态
for a=1 to 4 do begin
生成下一个目标
加入队列
康托展开计算hash码,标记访问和步数
如果达到目标则退出过程
end
h退出队列
until 队列空

说明:队列就是从头进从尾出的一种线性数据结构,不懂自己查

康托展开不懂自己查,这个hash是必要的,不然不能在要求时间内解决问题。

bfs算法应该就不错。A*不能得到最优解。

热点内容
linux485 发布:2025-07-05 14:38:28 浏览:293
php用的软件 发布:2025-07-05 14:06:22 浏览:744
没有权限访问计算机 发布:2025-07-05 13:29:11 浏览:418
javaweb开发教程视频教程 发布:2025-07-05 13:24:41 浏览:666
康师傅控流脚本破解 发布:2025-07-05 13:17:27 浏览:226
java的开发流程 发布:2025-07-05 12:45:11 浏览:669
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:271
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:821
1970linux 发布:2025-07-05 12:12:43 浏览:109
解压挑刺 发布:2025-07-05 12:12:12 浏览:537