九宫排序java代码 九宫格排列组合

java编程九宫格问题要求:根据输入的数字n , 如:3,5,7...以矩阵显示n行n列数,这些数由1~n*n构成,要求矩阵的每行每列及对角线上n个数之和相等 预备知识: 在距阵中,1在第一行正中,随后的数字应放到上一个数字的右上方方格中,如果向上不行,就放到该列的最下方格子;如果向右不行,就放到该行的最左边;如果都不行,就放到上一个数字的正下方;如果目标格子中已经有数字,也放到上一个数字的正下方 思路: 1) 使用2维数组预备存储1~n*n这些数字 2) 1是放到第一行正中的,所以其索引号是:[0][(n-1)/2] 3) 随后的数字,其索引号原则如下 1 num的行索引为 num-1 的 (行索引-1) , num的列索引为 num-1 的 (列索引 1) 2如果发现num的行,列索引都越位(-1或n),则 num的行索引为 num-1 的 (行索引 1) , num的列索引为 num-1 的 (列索引) 3如果发现num的行,列索引指向的位置已经有数字 , 则 num的行索引为 num-1 的 (行索引 1) , num的列索引为 num-1 的 (列索引) 4如果发现num的行越位(-1),则 num的行索引为n-1 5如果发现num的列越位(n),则 num的列索引为0import java.util.Scanner; public class JiuGong { public static void main(String[] args) { Scanner s = new Scanner(System.in); int x = s.nextInt(); //输入长度 int h = 0; //行 //在距阵中 , 1在第一行正中 int l = x / 2; //列 int[][] a = new int[x][x]; for (int i = 1; i = x * x; i) { a[h][l] = i; //运行提示溢出 //随后的数字应放到上一个数字的右上方方格中 h--; l; //3.如果都不行,就放到上一个数字的正下方 if (h0l = x) { //先返回上一个数字 h; l--; //再下移一行 h; } //1.如果向上不行 , 就放到该列的最下方格子 else if (h0) { h = x - 1; } //2.如果向右不行,就放到该行的最左边 else if (l = x) { l = 0; } //4.如果目标格子中已经有数字,也放到上一个数字的正下方 else if (a[h][l]0) { //先返回上一个数字 h; l--; //再下移一行 h; } } //打印九宫格 for (int j = 0; jx; j) { for (int k = 0; kx; k) { System.out.print(a[j][k]" "); } //换行 System.out.println(); } } }
采纳哦
重排九宫问题(用java实现)import java.util.Arrays;
public class NineGridTest{
public static void main(String[] args){
//三行数据依次排列9个元素构造实例九宫排序java代码,空位填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;ianswer.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("缺少数据九宫排序java代码:%1$d(%2$d)",grids.length,9));
}
int i,j;
for(i=8;i=0;i--){
for(j=0;j9;j){
if(grids[j]==i){
break;
}
}
if(j==9){
throw new IllegalArgumentException("无效九宫排序java代码的数字序列 。缺少:" i);
}
}
this.grids=grids;
answer=new int[50];
length=0;
}
public int[] go(){
for(vacant=0;vacant9grids[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;isiblings.length;i){
if(step0grids[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;
}
}
}
//递归算法 。超慢 。。。。
java 九宫格数组package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test3$3 {
static int count = 0;
public static void main(String[] args) {
// int int1=0,int2=0,int3=0,int4=0,int5=0,int6=0,int7=0,int8=0,int9=0;
int[] intX = new int[9];
for (int i = 0; i9; i) {
intX[i] = 0;
}
int[] oan = new int[9];
for (int i = 0; i9; i) {
oan[i] = i1;
}
// 每行的和
int temp = 0;
for (int i = 0; i9; i) {
temp= oan[i];
}
count = temp / 3;
System.out.println(count);
//
List list = new ArrayList();
for (int i = 0; i9 - 2; i) {
for (int j = i1; j9 - 1; j) {
for (int k = j1; k9; k) {
if (oan[i]oan[j]oan[k] == count) {
int[] inttemp = { oan[i], oan[j], oan[k] };
// list.add(inttemp.toString());
for (int h = 0; h3; h) {
int inttemp1 = inttemp[h];
switch (inttemp1) {
case 1:
intX[0]= 1;
break;
case 2:
intX[1]= 1;
break;
case 3:
intX[2]= 1;
break;
case 4:
intX[3]= 1;
break;
case 5:
intX[4]= 1;
break;
case 6:
intX[5]= 1;
break;
case 7:
intX[6]= 1;
break;
case 8:
intX[7]= 1;
break;
case 9:
intX[8]= 1;
break;
default:
break;
}
}
}
}
}
}
//排序
Arrays.sort(intX);
// test
for (int i = 0; iintX.length; i) {
System.out.println(intX[i]);
}
//
int a = intX[7];
int [][]reInt = new int[3][];
reInt [1][1] = intX[8];
}
}
java 写一个九宫格的代码!不用很复杂,实现了基本的功能就行! 谢谢大家!我自己写的都晕了/*
九宫格算法代码 C版
*/
#include stdio.h
int map[9][9] = {0, 0, 3, 8, 1, 0, 0, 0, 9,
5, 0, 0, 4, 0, 0, 0, 8, 0,
0, 6, 0, 9, 0, 0, 1, 0, 0,
0, 0, 8, 0, 3, 0, 0, 0, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0,
9, 0, 0, 6, 0, 0, 5, 0, 0,
0, 0, 6, 0, 0, 9, 0, 1, 0,
0, 1, 0, 0, 0, 5, 0, 0, 4,
2, 0, 0, 0, 4, 8, 7, 0, 0};
void display()
{
int i;
int j;
for (i = 0; i9; i)
{
for (j = 0; j9; j)
{
if(map[i][j])
{
printf("%d", map[i][j]);
}
else
{
printf("");
}
}
printf("\n");
}
}
int check(int x, int y, int *mark)//check函数为该格子可以选择九宫排序java代码的数字
{
int i;
int j;
int gi;
int gj;
int count = 0;
for (i = 1; i = 9; i)
{
mark[i] = 0; //初始化
}
for (i = 0; i9; i)
{
mark[map[x][i]] = 1;//表示该行该数字已存在
mark[map[i][y]] = 1; //表示该列该数字已存在
}
gi = x / 3 * 3;// 九宫格把map分割成9个小块,如果该格子所在行列为(1,4),那么它所在子格子起始为(0,3)到(2,5)的九个小格子
gj = y / 3 * 3;
for (i = 0; i3; i)
{
for (j = 0; j3; j)
{
mark[map[gii][gjj]] = 1; //此循环为表示所在子格子的九个小格子中已存在该数字
}
}
for (i = 1; i = 9; i)
{
if(0 == mark[i]) //如果该数字不存在则
{
count;
}
}
return count;
【九宫排序java代码 九宫格排列组合】}
void crack()//九宫排序java代码??
{
int i;
int j;
int mark[10];//标志数字是否已存在
int min = 10; //记录最少可能数字数
int ci = -1; //ci,cj用来记录最少可能数字的格子所在行列
int cj;
for (i = 0; i9; i)
{
for (j = 0; j9; j)
{
if (map[i][j])
{
continue; //如果该格子已有数字则跳到下一个格子
}
int c = check(i, j, mark); //c为该格子可以选择的数字
if (0 == c)
{
return;
}
if (cmin)
{
ci = i;
cj = j;
min = c;
}
}
}
if (-1 == ci)
{
printf("The answer is:\n");
display();
return;
}
check(ci, cj, mark);//这个语句的作用是把mark这个数组设置成最小可能格子缺少的数字,若缺少则为0
for (i = 1; i = 9; i)
{
if (mark[i] == 0)
{
map[ci][cj] = i; //先填入该数字
crack(); //进行判断
}
map[ci][cj] = 0; //若这个数字不可以得到解则判断下一可能数字(这里类似0-1背包问题)
}
}
int main()
{
printf("The game is:\n");
display();
crack();
return 0;
}
java编程题,在九宫格内填入1—9九个数字,使得横竖排的数字相加之和都相等/*直接复制运行就可以九宫排序java代码,每一行九宫排序java代码的九个数字代表一个九宫格的9个数字九宫排序java代码,从左到右九宫排序java代码 , 从上到下*/
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 (km) {
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, k1, 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代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于九宫格排列组合、九宫排序java代码的信息别忘了在本站进行查找喔 。

    推荐阅读