-
图文榜单
- 1.
国际象棋中一些棋子的走法
- 2.
QQ游戏英雄杀照片秀
- 3.
玩象棋有什么好处
- 4.
杰森斯坦森跟一个老人下国际象棋的电影
- 5.
象棋开局可以直接用自己的炮吃对方的马么
- 6.
国际象棋史上最年轻的冠军是谁
- 7.
韩国象棋的中韩对比
- 8.
欢乐斗地主的加倍是怎么回事
JAVA程序写一个method验证一个数独是否正确
整理:yaobaiwang.com 时间:07月07日
[JAVA设计的五子棋源程序]java编写五子棋程序:import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.geom.*; import java.util.*; class PaintPanel extends JPanel...+阅读
JAVA程序写一个method验证一个数独是否正确
public static Geocache[] createGeocaches(int a) {
if(a <= 0) return new Geocache[0];
Random rand = new Random();
Geocache[] result = new Geocache[a];
for(int i = 0; i //因为题目没有描述,这里假设x, y是随机整数,Geocache有构造函数(int, int)
int x = rand.nextInt();
int y = rand.nextInt();
result[i] = new Geocache(x, y);
}
return result;
}
哪位大师能告诉我我编的 java数独解算程序哪里有错误啊
没看懂你的 考下来还要报错 我自己写了一个生成数独的方法 表示可以用 public class ShuDu { /** 存储数字的数组 */ static int[][] n = new int[9][9]; /** 生成随机数字的源数组,随机数字从该数组中产生 */ static int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; public static void main(String[] args) { // 生成数字 for (int i = 0; i int time = 0; // 尝试填充的数字次数 // 填充数字 for (int j = 0; j // 产生数字 n[i][j] = generateNum(time); // 如果返回值为0,则代表卡住,退回处理// 退回处理的原则是:如果不是第一列,则先倒退到前一列,否则倒退到前一行的最后一列 if (n[i][j] == 0) { if (j >0) { // 不是第一列,则倒退一列 j -= 2; continue; } else {// 是第一列,则倒退到上一行的最后一列 i--; j = 8; continue; } } if (isCorret(i, j)) { // 填充成功 time = 0;// 初始化time,为下一次填充做准备 } else { // 继续填充 time++;// 次数增加1 // 继续填充当前格 j--; } } } // 输出结果 for (int i = 0; i for (int j = 0; j System.out.print(n[i][j] + " "); } System.out.println(); } }/** * * 是否满足行、列和3X3区域不重复的要 * param row 行号 * param col 列号 * * * return true代表符合要 */ public static boolean isCorret(int row, int col) { return (checkRow(row) & checkLine(col) & checkNine(row, col)); }/** * * 检查行是否符合要 * * * param row * 检查的行号 * * return true代表符合要 */ public static boolean checkRow(int row) { for (int j = 0; j if (n[row][j] == 0) { continue; } for (int k = j + 1; k if (n[row][j] == n[row][k]) { return false; } } } return true; }/** * * 检查列是否符合要 * param col 检查的列号 * return true代表符合要 */ public static boolean checkLine(int col) { for (int j = 0; j if (n[j][col] == 0) { continue; } for (int k = j + 1; k if (n[j][col] == n[k][col]) { return false; } } } return true; }/** * 检查3X3区域是否符合要 * * param row 检查的行号 * * param col 检查的列号 * * return true代表符合要 */ public static boolean checkNine(int row, int col) { // 获得左上角的坐标 int j = row / 3 * 3; int k = col / 3 * 3; // 循环比较 for (int i = 0; i if (n[j + i / 3][k + i % 3] == 0) { continue; } for (int m = i + 1; m if (n[j + i / 3][k + i % 3] == n[j + m / 3][k + m % 3]) { return false; } } } return true; }/** * 产生1-9之间的随机数字 * * 规则:生成的随机数字放置在数组8-time下标的位置,随着time的增加,已经尝试过的数字将不会在取到 * * 说明:即第一次次是从所有数字中随机,第二次时从前八个数字中随机,依次类推,* * 这样既保证随机,也不会再重复取已经不符合要的数字,提高程序的效率* * * 这个规则是本算法的核心 * * param time 填充的次数,0代表第一次填充 * * return */ public static int generateNum(int time) { // 第一次尝试时,初始化随机数字源数组 if (time == 0) { for (int i = 0; i num[i] = i + 1; } } // 第10次填充,表明该位置已经卡住,则返回0,由主程序处理退回 if (time == 9) { return 0; } // 不是第一次填充 // 生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字 int ranNum = (int) (Math.random() * (9 - time)); // 把数字放置在数组倒数第time个位置, int temp = num[8 - time]; num[8 - time] = num[ranNum]; num[ranNum] = temp; // 返回数字 return num[8 - time]; }
数独源码
没试过#include #include int sudoku[81] ; // 数独题目阵列int tempNum[81] ; // 上一次填数位置int tempSp= 0 ; // 上一次填数位置指标int startH[81] ; // 列位置的起点int startV[81] ; // 行位置的起点int startB[81] ; // 九宫格位置的起点int addH[9] ; // 列位置的加值int addV[9] ; // 行位置的加值int addB[9] ; // 九宫格位置的加值int main(int argc, char *argv[]) {int j ; if(argc>1) for(j=0; jelse exit(0) ;printf( "----------\n");printSudoku(sudoku) ;init() ; // 参数设定tryAns() ; // 测试解printf( "----------\n");printSudoku(sudoku) ;printf( "----------\n");}int init() {// 参数设定(设定这些参数之后,无论检查行、列、九宫格都方便多了)int i ;for(i=0; istartH[i]= i/9* 9 ; // 列位置的起点startV[i]= i% 9 ; // 行位置的起点startB[i]= ((i/9)/3)*27+ ((i%9)/3)*3 ; // 九宫格位置的起点}for(i=0; iaddH[i]= i ; // 列位置的加值addV[i]= i*9 ; // 行位置的加值addB[i]= (i/3)*9+ (i%3) ; // 九宫格位置的加值}}int printSudoku(int *prn) {// 印出数独题目(阵列内容)int i ;for(i=0; iprintf( "%2d", prn[i]);if(i%9==8) printf("\n");}}int tryAns() {// 测试解int sp=getNextBlank(-1) ; // 取得第一个空白的位置开始填入数字do {sudoku[sp]++ ; // 将本位置数字加 1if(sudoku[sp]>9) { // 如果本位置的数字已大於 9 时则回到上一个位置继续测试sudoku[sp]= 0 ;sp= pop() ;} else {if(check(sp)==0) { // 如果同行、列、九宫格都没有相同的数字,则到下一个空白处继续push(sp) ; // 当然,如果发现有相同的数字时,就需把原位置的数字加 1(所以本处什麽都不做)sp= getNextBlank(sp) ;}}} while(sp>=0 & sp}int getNextBlank(int sp) {// 取得下一个空白的位置do {sp++ ;} while(sp0) ;return(sp) ;}int check(int sp) {// 检查同行、列、九宫格有没有相同的数字,若有传回 1int fg= 0 ;if(!fg) fg= check1(sp, startH[sp], addH) ; // 检查同列有没有相同的数字if(!fg) fg= check1(sp, startV[sp], addV) ; // 检查同行有没有相同的数字if(!fg) fg= check1(sp, startB[sp], addB) ; // 检查同九宫格有没有相同的数字return(fg) ;}int check1(int sp, int start, int *addnum) {// 检查指定的行、列、九宫格有没有相同的数字,若有传回 1int fg= 0, i, sp1 ;for(i=0; isp1= start+ addnum[i] ;if(sp!=sp1 & sudoku[sp]==sudoku[sp1]) fg++ ;}return(fg) ;}int push(int sp) {// 将指定的位置放入堆叠中tempNum[tempSp++]= sp ;}int pop() {// 取出堆叠中的上一个位置if(tempSpelse return(tempNum[--tempSp]) ;}
以下为关联内容:
谁能帮我写一个JAVA人人对战的五子棋java五子棋人机:package com.java.demo1; import javax.swing.* ; import java.awt.*; import java.awt.event.*;/** * 自定义五子棋棋盘面板类 * */ public class Gobang ext...
俄罗斯方块 Java程序源代码Java俄罗斯方块的源代码能在eclipse上运行的:import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Els extends JFrame implements KeyListene...
java五子棋程序构想请帮修改下请帮修改下只要设计构想不爱java中的五子棋:之前跟楼主讨论过这个设计思路的问题,不过貌似楼主还是不太明白。对于楼主写的东西不能叫设计思路,仅仅是部分细节的半伪代码而已。一个设计思路最起码需要体现...
谁会数独算法?谢谢数独有什么规律:见到很多同样喜欢数学问题的朋友提问关于9宫格等的问题,我在此做出答案和解法,希望能给大家一点帮助。 九宫格,二十五宫格,甚至八十一宫格,只要是奇数的平方宫格者...
6宫格数独规律表六宫格数独题目怎么做:六宫格数独是一种新颖的数独变体,它的规则和传统数独相似,但是它不是由九宫格组成,而是由六个3x2的矩形组成。每个矩形内都有1-6的数字,每行和每列都不能重...
数独题目: 6987862614251解答数独题6X6:第5行漏掉一个数,经分析应该是4后面漏掉一个?(未知数)结果如下:*-----------------------------------------------*| 6 3 1| 9 2 4| 8 5 7|| 9 7 5| 1 8 3| 4 6 2|...
一个五子棋游戏的java程序跪JAVA五子棋源代码:import java.awt.*; import java.awt.event.*; class ChessPad extends Panel implements MouseListener,ActionListener { int x = -1, y = -1, chessCo...
一个c语言不用c编的五子棋程序用C语言在linux下编写一个五子棋程序!#include#include#include#include#include#include#define SHURU 1#define FANGXIANG 2#define WUXIAO 0#define TUICHU 3/***********...
我想用JAVA编一个五子棋但是不会编电脑下棋的代码了请高手指java怎样写一个15 15的五子棋界面:搜索算法实现描述 注意下面的核心的算法中的变量currentBoardSituation,表示当前机器最新的盘面情况, CountList表示第一层子节点可以选择的...