1、跪求重排九宫的C语言算法,要完整的程序!我的编译器是VC6.0
给分,马上给你发一份现成的.
2、重排九宫问题(用java实现)
import java.util.Arrays;
public class NineGridTest{
public static void main(String[] args){
//三行数据依次排列9个元素构造实例,空位填0,调用go方法获取答案。
NineGrid example=new NineGrid(new int[]{1,6,5,3,0,2,7,8,4});
int[] answer=example.go();
if(answer==null){
System.out.println("没有找到步骤");
}
else{
for(int i=0;i<answer.length;i++){
System.out.print(answer[i]);
}
System.out.println();
}
}
}
class NineGrid{
private static final int MAX_STEP=50;
private static final int[] right=new int[]{1,2,3,8,0,4,7,6,5};
private int vacant,length;
private int[] grids,answer;
public NineGrid(int[] grids){
if(grids.length!=9){
throw new IllegalArgumentException(String.format("缺少数据:%1$d(%2$d)",grids.length,9));
}
int i,j;
for(i=8;i>=0;i--){
for(j=0;j<9;j++){
if(grids[j]==i){
break;
}
}
if(j==9){
throw new IllegalArgumentException("无效的数字序列。缺少:"+i);
}
}
this.grids=grids;
answer=new int[50];
length=0;
}
public int[] go(){
for(vacant=0;vacant<9&&grids[vacant]!=0;vacant++);
return nextStep(0)?Arrays.copyOf(answer,length):null;
}
private boolean OK(){
return Arrays.equals(grids,right);
}
private boolean nextStep(int step){
if(step==MAX_STEP){
return false;
}
int[] siblings=getSiblings(vacant);
for(int i=0;i<siblings.length;i++){
if(step>0&&grids[siblings[i]]==answer[step-1]){
continue;
}
grids[vacant]=grids[siblings[i]];
answer[step]=grids[vacant];
grids[siblings[i]]=0;
vacant^=siblings[i];
siblings[i]^=vacant;
vacant^=siblings[i];
if(OK()){
length=step+1;
return true;
}
else{
boolean result=nextStep(step+1);
if(result){
return true;
}
else{
grids[vacant]=grids[siblings[i]];
vacant=siblings[i];
grids[vacant]=0;
}
}
}
return false;
}
private int[] getSiblings(int position){
switch(position){
case 0:return new int[]{1,3};
case 1:return new int[]{0,2,4};
case 2:return new int[]{1,5};
case 3:return new int[]{0,4,6};
case 4:return new int[]{1,3,5,7};
case 5:return new int[]{2,4,8};
case 6:return new int[]{3,7};
case 7:return new int[]{4,6,8};
case 8:return new int[]{5,7};
default:return null;
}
}
}
//递归算法。超慢。。。。
3、求重排九宫格过程~~请各位帮一下~谢谢啦~
不用排了,初始状态的逆序数是奇数,如果只是交换含9的相邻格的话不可能排成顺序,只能排成
1 2 3
4 5 6
8 7 9
4、3x3重排九宫问题
http://pan.baidu.com/s/1gd2BwH1
这个是标准的图片靠空格zhidao移动的自解。
空格只是一个量而已。你可以版用0代替权,也可以用8代替。
初始化得改改。
5、九宫格1-9个数字加起来等于15应该怎么排列
九宫格1-9个数字知加起来等于15有四种不同的排列方式:
一:
二:
三:
四:
九宫格,一款数字游戏,起源于河图洛书,河图与洛书是中国古代流传下来的两幅神秘图案,历来被道认为是河洛文化的滥觞,中华文明的源头,被誉为"宇宙魔方"。相传,上古伏羲氏时,洛阳东北孟津县境内的黄河中浮出龙马,背回负"河图",献给伏羲。伏羲依此而演成八卦,后为《周易》来源。又相传,大禹时,洛阳西洛宁县洛河中浮出神龟,背驮"洛书",献给大禹。大禹依此治水成功,遂划天下为九州。又依此定九章大法,治理社会,流传下来收入《尚书》中,名《洪范》。《答易·系辞上》说:"河出图,洛出书,圣人则之",就是指这两件事。
6、回忆80后最爱玩的玩具有哪些
华容道故事出自古典小说《三国演义》,说的是刘备和孙权联合,在赤壁一战中,把曹操杀了个片甲不留。曹操只带了十余人马,沿华容小道落荒而逃。埋伏在小道上的关羽思念曹操旧情,放走了他,使他得以逃出华容道。
后来这个故事成了中国古代一种图形移位玩具的名称。这种玩具是要将一块大图块通过空位移到出口,和华容道故事有些相似。后来根据不同时代的特点,叫法不一,有叫“关羽放曹”的,有叫“曹操 逼走华容道”,也有叫“鲁智深冲出五台山”、“赶走纸老虎”、“敢把皇帝拉下马”、“船坞排档”的等等。
华容道玩具到底成形于何时?目前尚无考证材料。中国最早研究这种玩具的是西北工大教授姜长英,他在1949年出版的《科学消遣》一书中,专列有“华容道”内容。他说,最早看到的华容道实物是在40年代的上海。1952年数学家许莼舫在《数学漫谈》一书中也提到了华容道。1956年武汉出版的《数学通讯》发表过这种游戏的征解文章。上世纪80年代,一些媒体组织过华容道比赛,同时有一些专著出版。
华容道的诞生,有一个发展演变过程,其雏形应首推中国唐宋时代风行的重排九宫游戏。九宫游戏的起源,可以追溯到远古时代的八卦、河图和洛书,河图和洛书是数学里的三阶幻方,中国古代叫“纵横图”。唐宋时代的数学书中记载有许多纵横图的排法,在此基础上,就产生了重排九宫游戏。现在北京益智玩具专家余俊雄将这种游戏设计成一种“八仙过海”玩具。毛鹏将重排九宫游戏与魔方结合,创制了中华梦幻魔方玩具。
华容道玩具经过多年传播得以定型,其典型样式是包括棋盘和棋子两部分,棋盘有4 5个方格,棋子共10枚,分别占1、2、4个方格,其中最大的一枚棋子被命名为曹操,中号的5枚棋子为刘备的 “五虎上将”,小号的4枚棋子是兵。玩法是通过棋盘的2个空格将曹操调到出口。
华容道的棋子布局形式多种多样,典型样式为“横刀立马”。名称来历是关羽棋子横着放,关羽武器为刀,故名“横刀”;马超棋子立着放,故名“立马”。一般玩法是要求用最少步数使曹操走到出口。据资料介绍,日本藤村幸三郎在《数理科学》上发表了85步解法,后清水达雄减到83步,美国马丁·加德纳又减到81步。据新四军老战士梁青回忆,当年战士们在休息时也常玩这种玩具,就得到81步的解法。这是最少的步数,也是不可再减的记录。华容道除了“横刀立马”典型布局外,还有其他布局,多达数百种。中国古老移图游戏大约在元朝时经中亚传到欧洲。1914年美国智力大师山姆·劳埃德在《趣题大全》一书中,就引进了“中国的文字转换趣题”,这实际上也是一种移图玩具。西方19世纪末广为流行的“移动十五”(The Fifteen puzzle)游戏就是在中国“重排九宫”基础上发明的。华容道吸收了“重排九宫”和“移动十五”玩具的优点,采取了移动10块图形方案,所以英文中讲华容道称作 Chinese Sliding Block(中国滑块难题)。
“华容道”是一种中国古代的智力游戏玩具,在一个宽为4,长为5的矩形框中,有10个棋子,包括一个曹操,五虎上将,四个小卒,要求在各个棋子不重叠的情况下进行移动,最有将曹操从棋盘上方移动到下边中央为成功。由于五员大将可以横放也可以竖放,有许多种排列方法,因而可以形成非常复杂的棋局,
7、C#编程做3x3的重排九宫格问题
http://pan.baidu.com/s/1gd2BwH1
怎么这百个这度么版流行啊权
8、vb模拟重排九宫格的小游戏,怎么实现啊,用文本框可以么。求代码
文本框可以 我可以使用picture做
需要可以找我
文本框可以 我可以使用picture做
需要可以找我
文本框可以 我可以使用picture做
需要可以找我
9、C++编程,用A*算法重排九宫图
昏, 那个不叫九宫图吧, 那个是螺旋矩阵, 比九宫图简单多了:
#include <iostream>
#include <cstring>
using namespace std;
const int size = 200;
int iM2Dimen[size][size];
#define M iM2Dimen
int Digit(int n)
{
int x = 0;
do{
++x;
n /= 10;
}while(n != 0);
return x;
}
void Print(int n)
{
int width = Digit(n*n);
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
cout.width(width);
cout << M[i][j] << ' ';
}
cout << endl;
}
}
void Helix(int n)
{
memset(M, 0, sizeof M);
int iR = -1, iC = -1;
int x = n;
// 把i <= n*n 改成i < n*n 看看
for(int i = 1, j = 0; i <= n*n; ++i)
{
for(++iR, ++iC, j = 0; j < x; ++iC, ++i, ++j)
M[iR][iC] = i;
if(i > n*n)break;
--x;
for(--iC, ++iR, j = 0; j < x; ++iR, ++i, ++j)
M[iR][iC] = i;
if(i > n*n)break;
for(--iR, --iC, j = 0; j < x; --iC, ++i, ++j)
M[iR][iC] = i;
if(i > n*n)break;
--x;
for(++iC, --iR, j = 0; j < x; --iR, ++i, ++j)
M[iR][iC] = i;
if(i > n*n)break;
--i;
}
Print(n);
}
int main()
{
Helix(3);
cout << endl;
Helix(4);
cout << endl;
Helix(5);
cout << endl;
}
测试结果:
1 2 3
8 9 4
7 6 5
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9