标签:node hdu java 1426 int num static new
https://blog.csdn.net/qq_41837216/article/details/88732446?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
引用自以上博客
package sub;
import java.util.*;
public class B1246 {
static class node
{
int x,y;
node(){};
node(int x,int y)
{
this.x = x;
this.y = y;
}
}
static node[]p = new node[81];//用来储存未知格
static int[][] map = new int[9][9];
static int num; //有多少个位置需要填数
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
int t = 0;
String s;
while(cin.hasNext())
{
num = 0;
for(int i=0;i<9;i++)
{
//s = cin.nextLine();
for(int j=0;j<9;j++)
{
s = cin.next(); //注意输入格式 一次只读取一个字符 如果一次读入一行会导致TLE
char[] a = s.toCharArray();
if(a[0]>='1' && a[0]<='9')
map[i][j] = a[0]-'0';
else if(a[0]=='?')
{
map[i][j] = 0;
p[num] = new node(i,j);
num++;
}
}
}
if(t++ > 0)
System.out.println();
dfs(0);
}
}
public static void dfs(int k)
{
if(k==num) //所有位置都填满 输出
{
for(int i=0;i<9;i++)
{
for(int j=0;j<8;j++)
System.out.print(map[i][j]+" ");
System.out.println(map[i][8]);
}
return ;
}
for(int i=1;i<=9;i++)
{
if(check(k,i)==1) //判断能否填数
{
map[p[k].x][p[k].y] = i; //填数
dfs(k+1); //搜索下一个位置的填法
map[p[k].x][p[k].y] = 0; //还原
}
}
return ;
}
public static int check(int n,int k)
{
for(int i=0;i<9;i++) //判断行和列是否有与 k 重复的值
{
if(map[p[n].x][i]==k || map[i][p[n].y]==k)
return 0;
}
int x = p[n].x/3*3;
int y = p[n].y/3*3;
//判断所在的 3*3 子矩阵中是否有与 k 重复的值
for(int i=x;i<x+3;i++)
{
for(int j=y;j<y+3;j++)
{
if(map[i][j]==k)
return 0;
}
}
return 1;
}
}
默默吐槽 为什么要用java练算法呢,输入整了半天,下次不报名java组的了太累辽
点月♡ 发布了3 篇原创文章 · 获赞 1 · 访问量 41 私信 关注标签:node,hdu,java,1426,int,num,static,new 来源: https://blog.csdn.net/qq_45068396/article/details/104545564
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。