九宫图数读java代码的简单介绍

如何用计算机程序来解决九宫图问题

九宫图

创新互联致力于做网站、成都网站设计,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择创新互联,就选择了安全、稳定、美观的网站建设服务!

#includestdio.h

#includetime.h

#includestdlib.h

the function defination

void create(int [][3]);

void show(int [][3]);

void set_value(int [][3]);

void aim_get(int [][3]);

void target(int [][3]);

void judge_x1(int [][3]);

void judge_x2(int [][3]);

void judge_x3(int [][3]);

void judge_x4(int [][3]);

void judge_x5(int [][3]);

void shift_all(int [][3]);

void shift_low_six(int [][3]);

void anti_shift_all(int [][3]);

void shift_low_four(int [][3]);

void last_shift(int [][3]);

void set_x5(int [][3]);

the main function body main()

srand(time(NULL));

int cDiagram[3][3];

create(cDiagram); creat the new array ,set the value are 10;

set_value(cDiagram);

//last_shift(cDiagram);

return 0;

}

建立一个3*3数组,初值都设为10

void create(int array[][3])

{

printf("\n\n**\n\n");

printf("九宫图算法实现过程\n\n");

printf("**\n\n");

int line;

int row;

for(line=0;line3;line++)

{

for(row=0;row3;row++)

{

array[line][row]=10;

}

}

// set_value(array);

//show(array);

}

显示数组状态

void show(int array[][3])

{

for(int i=0;i3;i++)

{

for(int j=0;j3;j++)

{

printf("%3d",array[i][j]);

}

printf("\n\n");

}

}

产生数组的初始状态 void set_value(int array[][3])

{

int i=0;

int rand_num_line;

int rand_num_row;

printf(" \n\n九宫图的初始值为:\n\n");

while(i=8)

{

rand_num_line=rand()%3;

rand_num_row=rand()%3;

if(array[rand_num_line][rand_num_row]!=i array[rand_num_line][rand_num_row]==10)

{

array[rand_num_line][rand_num_row]=i;

++i;

}

}

show(array);

//printf(" let's begin!!\n");

aim_get(array);

}

judge the initial array get the target or no !

void aim_get(int array[][3])

{

int aim[3][3]={{1,2,3},{8,0,4},{7,6,5}};

int line;

int row;

int judge=0;

for(line=0;line3;line++)

{

for(row=0;row3;row++)

{

if(array[line][row]!=aim[line][row])

{

judge=1;

}

}

}

if(judge==1)

{

judge_x1(array);

}

else

{

target(array);

}

}

the target diagram

void target(int array[][3])

{

printf("\n\n the last diagram is :\n");

show(array);

}

/judge the x1 is 1 or no!

void judge_x1(int array[3][3])

{

//int x1=1;

int temp;

//printf(" \n\n\n the array[0][2]=%d\n\n",array[0][2]);

if(array[0][2]!=1 array[0][2]!=0) // x3!=1 || x3!=0;

{

while(array[0][0]!=1)

{

//printf("i am here!!1");

temp=array[0][0];

array[0][0]=array[0][1];

array[0][1]=array[1][1];

array[1][1]=array[1][2];

array[1][2]=array[2][2];

array[2][2]=array[2][1];

array[2][1]=array[2][0];

array[2][0]=array[1][0];

array[1][0]=temp;

}

}

else

{

if(array[0][2]==0) // x3==0;

{

// printf("\n\n array[0][2]=0\n\n");

temp=array[0][2];

array[0][1]=array[0][2];

array[0][2]=temp;

judge_x1(array);

goto tt;

}

我都看不懂……

java编程题,在九宫格内填入1—9九个数字,使得横竖排的数字相加之和都相等

/*直接复制运行就可以,每一行的九个数字代表一个九宫格的9个数字,从左到右,从上到下*/

import java.util.ArrayList;

import java.util.Arrays;

public class Test1 {

private static ArrayListString arrangeList = new ArrayListString(); 

 public static void main(String[] args) {

String str = "123456789";//你要排列组合的字符串

char list[] = str.toCharArray();//将字符串转换为字符数组

genernateData(list, 0, list.length - 1);//参数为字符数组和0和字符数组最大下标

int arr[]=new int[9];

for(String str1 : arrangeList){

for(int k=0;k9;k++){

arr[k]=Integer.parseInt(str1.substring(k,k+1));

}

if(arr[0]+arr[1]+arr[2]==15arr[3]+arr[4]+arr[5]==15arr[6]+arr[7]+arr[8]==15arr[0]+arr[3]+arr[6]==15arr[1]+arr[4]+arr[7]==15arr[2]+arr[5]+arr[8]==15arr[0]+arr[4]+arr[8]==15arr[2]+arr[4]+arr[6]==15){

System.out.println(Arrays.toString(arr));

}

}

}

 

public static void genernateData(char list[], int k, int m) {

 if (k  m) {

 StringBuffer sb = new StringBuffer();//创建一个StringBuffer对象sb

 for (int i = 0; i = m; i++) {

 sb.append(list[i]);//循环将字符数组值追加到StringBuffer中

 }

 arrangeList.add(sb.toString());

 } else {

 for (int i = k; i = m; i++) {

 swapData(list, k, i);//将下表为k和i的值调换位置

 genernateData(list, k + 1, m);

 swapData(list, k, i);

 }

 }

}

private static void swapData(char list[], int k, int i) {

char temp = list[k];

list[k] = list[i];

list[i] = temp;

}

}

用java实现,得到九宫格1-9的任意数,怎么得到这个数周围的数

int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};

Scanner input = new Scanner(System.in);

System.out.println("输入数字:");

int k = input.nextInt();

for(int i=0;i3;i++){

for(int j=0;j3;j++){

if(arr[i][j]==k){

for(int m=i-1;m=i+1;m++){

for(int n=j-1;n=j+1;n++){

if(m=0m=2n=0n=2){

if(m!=i||n!=j)

System.out.print(arr[m][n]);

}

}

}

}

}

}

怎么样利用递归方法解决9*9九宫图问题

#include iostream

#include "grid9.h"

using namespace std;

struct notes

{

int n[40];

int top;

}route; // 用于记录路径

Grid9 grid; // 九宫格

int minDepth=40; // 记录最少步骤的步数

void inputG9();

void findG9(int depth);

int existing(int feature);

void main()

{

route.top=0; // 清空记录

inputG9(); // 输入原始数据

coutendl"开始计算步骤:"endl;

findG9(0); // 调用搜索程序

cout"最少需要"minDepth"步"endl; // 输出最小步骤数

system("pause");

}

void inputG9()

{

int in[9];

cout"请输入原始九宫数据:"endl;

cout"第一行:";

cinin[0]in[1]in[2];

cout"第二行:";

cinin[3]in[4]in[5];

cout"第三行:";

cinin[6]in[7]in[8];

for (int i=0;i9;i++)

grid.setGrid(i,in[i]);

}

void findG9(int depth)

{

int gd=grid.difference();

route.n[route.top++]=gd;

if (gd==0) // 得到一个解

{

minDepth=depth;

route.top--;

return;

}

if (depth==minDepth) // 已经到了最大深度,回溯

{

route.top--;

return;

}

for (int i=0;i12;i++)

{

grid.swap(i); // 交换i位置数据

gd=grid.difference();

if (!existing(gd))

findG9(depth+1); // 递归查找

grid.swap(i); // 恢复i位置数据

}

route.top--;

}

int existing(int feature)

{

for (int i=route.top-1;i=0;i--)

if (feature==route.n[i])

return 1;

return 0;

}

------解决方案--------------------------------------------------------

Grid9类的代码:

grid9.h

C/C++ codeclass Grid9

{

private:

int grid[9]; // 存储着九宫状态

public:

int readGrid(int x, int y); // 读出九宫中数值

int feature(); // 返回当前九宫状态的特征值

void setGrid(int feature); // 按特征值设置九宫

void setGrid(int index, int v); // 按索引设置九宫

int difference(); // 返回当前九宫状态距离完美九宫的差距,差距为0则意味着已经是完美九宫。

void swap(int position); // 交换指定位置上的数。

};

------解决方案--------------------------------------------------------

为了避免用户误以为死机,加一个进程显示在里面......有点破坏完美的感觉

C/C++ codevoid findG9(int depth)

{

route.n[route.top++]=grid.feature();

if (grid.difference()==0) // 得到一个解

{

if (depthminDepth)

cout"最短步骤已经下降到"depthendl;

minDepth=depth;

route.top--;

return;

}

if (depth==minDepth) // 已经到了最大深度,回溯

{

route.top--;

return;

}

for (int i=0;i12;i++)

{

grid.swap(i); // 交换i位置数据

if (!existing(grid.feature()))

findG9(depth+1); // 递归查找

grid.swap(i); // 恢复i位置数据

}

route.top--;

}

求九宫问题程序(C语言实现)

【转】

/*九宫图算法说明:根据分析,九宫图中间一位一定是5,另外关于中间位置

对称的每两个数字相加等于10,所以对于一个九宫图只通过其相邻位置的数

字就能计算出其他所有位置的数字,而且相邻位置的数字必然一个比5大,一

个比5小

算法设计思想:先根据选取规则,从剩下八个数里面选一大一小,再使用目

标函数检测选取是否正确,如果正确则打印出,否则重新选取,选数的过程

使用回溯法*/

#includestdio.h

int place(int*);

void main(void){/*九宫图算法*/

int a[9]={1,2,3,4,5,6,7,8,9};

int b[9]={0};/*表示数字的位置状态*/

int j,k,i;

for(k=0;k=3;k++){/*对于所有比5小的数*/

b[1]=a[k];/*选一比5小的数放到第一行第二列*/

for(j=8;j=5;j--){/*对于所有比5大的数*/

if(k!=(8-j)){/*不选择前面已选小数所对应的大数*/

b[0]=a[j];/*选一比5大的数放到第一行第一列*/

if(place(b)){/*若得到一解,则打印出*/

printf("\n 九宫图\n\n");

for(i=0;i=8;i++){

printf(" %d ",b[i]);

if((i+1)%3==0){

printf("\n\n\n");

}

}

getch();

exit(0);

}

} /* 回溯到上一级*/

} /*回溯到根一级 */

}

}

int place(int*p){ /*计算出其他位置的数字并检测是否为所求的解*/

p[2]=15-p[0]-p[1];

p[4]=5;

p[6]=10-p[2];

p[3]=15-p[0]-p[6];

p[5]=10-p[3];

p[7]=10-p[1];

p[8]=10-p[0];

if(p[2]+p[5]+p[8]==p[6]+p[7]+p[8]){/*其他行和列已通过计算检测了,只有第三行,第三列未检测*/

return(1);

}

else{

return(0);

}

}

【转】

///////////////////////////////////////

// 九宫图算法;

//////////////////////////////////////

#includesio.h

#includetime.h

#includeslib.h

//////////////////////////////////

//// the function defination

//////////////////////////////////

void create(int [][3]);

void show(int [][3]);

void set_value(int [][3]);

void aim_get(int [][3]);

void target(int [][3]);

void judge_x1(int [][3]);

void judge_x2(int [][3]);

void judge_x3(int [][3]);

void judge_x4(int [][3]);

void judge_x5(int [][3]);

void shift_all(int [][3]);

void shift_low_six(int [][3]);

void anti_shift_all(int [][3]);

void shift_low_four(int [][3]);

void last_shift(int [][3]);

void set_x5(int [][3]);

///////////////////////////////////////

////// the main function body ////

////////////////////////////////////////

main()

{

srand(time(NULL));

int cDiagram[3][3];

create(cDiagram); /////// creat the new array ,set the value are 10;

set_value(cDiagram);

//last_shift(cDiagram);

return 0;

}

///////////////////////////////////////

/// 建立一个3*3数组,初值都设为10;//

//////////////////////////////////////

void create(int array[][3])

{

printf("\n\n***********************************\n\n");

printf("九宫图算法实现过程\n\n");

printf("***********************************\n\n");

int line;

int row;

for(line=0;line3;line )

{

for(row=0;row3;row )

{

array[line][row]=10;

}

}

// set_value(array);

//show(array);

}

/////////////////////////////////////////

/// 显示数组状态 ////

////////////////////////////////////////

void show(int array[][3])

{

for(int i=0;i3;i )

{

for(int j=0;j3;j )

{

printf("=",array[i][j]);

}

printf("\n\n");

}

}

///////////////////////////////

/// 产生数组的初始状态 ///////

///////////////////////////////

void set_value(int array[][3])

{

int i=0;

int rand_num_line;

int rand_num_row;

printf(" \n\n九宫图的初始值为:\n\n");

while(i=8)

{

rand_num_line=rand()%3;

rand_num_row=rand()%3;

if(array[rand_num_line][rand_num_row]!=i array[rand_num_line][rand_num_row]==10)

{

array[rand_num_line][rand_num_row]=i;

i;

}

}

show(array);

//printf(" let's begin!!\n");

aim_get(array);

}

////////////////////////////////////////////////////////

//// judge the initial array get the target or no ! ///

//////////////////////////////////////////////////////////

void aim_get(int array[][3])

{

int aim[3][3]={{1,2,3},{8,0,4},{7,6,5}};

int line;

int row;

int judge=0;

for(line=0;line3;line )

{

for(row=0;row3;row )

{

if(array[line][row]!=aim[line][row])

{

judge=1;

}

}

}

if(judge==1)

{

judge_x1(array);

}

else

{

target(array);

}

}

/////////////////////////////////////

/////// the target diagram //////////

/////////////////////////////////////

void target(int array[][3])

{

printf("\n\n the last diagram is :\n");

show(array);

}

////////////////////////////////////

///judge the x1 is 1 or no! ///////

////////////////////////////////////

void judge_x1(int array[3][3])

{

//int x1=1;

int temp;

//printf(" \n\n\n the array[0][2]=%d\n\n",array[0][2]);

if(array[0][2]!=1 array[0][2]!=0) // x3!=1 || x3!=0;

{

while(array[0][0]!=1)

{

//printf("i am here!!1");

temp=array[0][0];

array[0][0]=array[0][1];

array[0][1]=array[1][1];

array[1][1]=array[1][2];

array[1][2]=array[2][2];

array[2][2]=array[2][1];

array[2][1]=array[2][0];

array[2][0]=array[1][0];

array[1][0]=temp;

}

}

else

{

if(array[0][2]==0) // x3==0;

{

// printf("\n\n array[0][2]=0\n\n");

temp=array[0][2];

array[0][1]=array[0][2];

array[0][2]=temp;

judge_x1(array);

goto tt;

}

else /// x3==1;

{ //printf("\n\narray[0][2] should is 1, %d",array[0][2]);

if(array[1][1]==0) //// x0==0;

{

temp=array[0][1];

array[0][1]=array[1][1];

array[1][1]=temp;

judge_x1(array);

}

else //// x3==1 x0!=0;

{

shift_all(array);

judge_x1(array);

}

}

}

printf(" 确定了X1位置后,九宫图为:\n");


当前文章:九宫图数读java代码的简单介绍
网站URL:http://ybzwz.com/article/dsepjgc.html