九宫算法java代码 java九宫格算法

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";//九宫算法java代码你要排列组合的字符串
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代码,这里就是 1 放到 8九宫算法java代码,6之间九宫算法java代码,3 放到4九宫算法java代码 , 8之间 。
一开始的 a,b是为了定位 (1) 的格子 ,
a,b就是在斜向写数字,a,b%3 就是在超出格子后转到对称的位置 。
i%3 其实就是写完一个 1,2 , 3的列,开始写4 , 5,6的斜行 。
你看不明白,是因为这里带有数学算法 。
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; //表示该列该数字已存在
}
【九宫算法java代码 java九宫格算法】gi = x / 3 * 3;// 九宫格把map分割成9个小块,如果该格子所在行列为(1,4),那么它所在子格子起始为(0,3)到(2,5)九宫算法java代码的九个小格子
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;
}
void crack()//九宫算法java代码?九宫算法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代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java九宫格算法、九宫算法java代码的信息别忘了在本站进行查找喔 。

    推荐阅读