首页 > 其他分享 >POJ2627 数独 (dfs or bfs)

POJ2627 数独 (dfs or bfs)

时间:2024-01-25 22:22:21浏览次数:25  
标签:return int dfs bfs POJ2627 num table 数独

POJ2627 数独 (dfs or bfs)

给出一个数独,空白用0表示,输出一个合理答案即可;

Sample Input

1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

Sample Output

143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127

常规dfs对每一个为0的单元对1-9进行判断,如果可以填,dfs下一个空,如果不可以,返回到上一个空。值得注意的是需要用一个变量记录当前填到的位置,当全部填完时就不再继续尝试其他的答案;

#include <cstdio>
#include <cstring>
int table[9][9];
int now;
bool check(int num,int p){
	if(table[p / 9][p % 9] == 0) {
		for(int i = 0;i < 9;i++) {
			if(table[i][p % 9] == num || table[p / 9][i] == num) return false;
		}
		int x = (p / 9 / 3) * 3, y = (p % 9 / 3) * 3;
		for(int i = 0;i < 3;i++){
			for(int j = 0;j < 3;j++){
				if(table[x + i][y + j] == num) return false;
			}
		}
	}
	return true;
}
void dfs(int cur){
	if(now == 80){
		return;
	}
	if(table[cur / 9][cur % 9] == 0){
		for(int i = 1;i <= 9;i++){
			if(check(i,cur)){
				table[cur / 9][cur % 9] = i;
				now = cur;
				dfs(cur + 1);
				if(now == 80){
					return;
				}
				table[cur / 9][cur % 9] = 0;
			}
		}
	}
	else{
		now = cur;
		dfs(cur + 1);
		if(now == 80){
			return;
		}
	}
	
}
int main() {
	int n;
	scanf("%d", &n);
	while(n--){
		for(int i = 0;i < 9;i++){
			for(int j = 0;j < 9;j++)
				scanf("%1d", &table[i][j]);
		}
		now = 0;
		dfs(0);
		for(int i = 0;i < 9;i++){
			for(int j = 0;j < 9;j++){
				printf("%d",table[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
} 

标签:return,int,dfs,bfs,POJ2627,num,table,数独
From: https://www.cnblogs.com/zhclovemyh/p/17988328

相关文章

  • POJ1416 (dfs)
    POJ1416(dfs)公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值(可以选择不切割)。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43(=1+2+34+6)是所有可能中最接近而不超......
  • POJ 2531(DFS)
    POJ2531题目大意,一共N个网络节点,每个节点与其他节点通信需要消耗流量,把这n个节点分为AB两个集合,使得A集合与B集合之间的通讯流量的总和最大。输入,N+N行N个的数据,输出最大的流量(N<=20)3050305004030400思路:假设最开始所有的都在B集合,通过dfs搜索,将数量从1-......
  • [转帖]OS、PFS、DFS 有啥区别?一文搞懂 6 大临床试验终点
    https://oncol.dxy.cn/article/670607 说到肿瘤临床研究,就不得不说临床试验终点(EndPoint),比如大家熟知的OS、PFS、ORR还有DFS、TTP、TTF……不同的终点服务于不同的研究目的。让我们一起来看看常用的临床试验终点都有什么区别以及优缺点。总生存overallsurvival,OS......
  • 图论——浅谈理论,DFS序和欧拉序
    图论——浅谈理论,DFS序、时间戳和欧拉序提示:本文在树论基础上。下文图例DFS序:124579836.欧拉序:124457997885236631.回加欧拉序:124257975852123631.下文举例均指此图。DFS序周所周知,DFS为深度优先遍历,其框架如:voiddfs(i......
  • 搜索学习笔记+杂题 (进阶二 dfs/bfs的进阶)
    前言:由于搜索的题还是做的太少了,所以以后有可能会不定期更新。四、还是进阶的dfs/bfs相关题单:戳我1、dfs(1)meetinthemiddleP2962[USACO09NOV]LightsG颠覆了我对折半搜索的认知,果然,只要满足了折半搜索的几个性质,基本上都可以使用折半搜索来处理。首先我们拿到的是一张......
  • 搜索学习笔记+杂题 (进阶一 dfs/bfs的进阶)
    前言:没啥好说的了。所以只能来写博客了。搜索杂题:相关题单:戳我二、进阶dfs/bfs1、dfs进阶——折半搜索(meetinthemiddle)由于深搜的时间复杂度在每种状态有两个分支的情况下是\(O(2^n)\)。所以一般暴力深搜的数据范围就在\(20-25\)之间。而对于有一大类的题,它的搜索思......
  • 实验三HDFS 常用操作
    HDFS常用操作使用hadoop用户名登录进入Linux系统,启动Hadoop,参照相关Hadoop书籍或网络资料,或者也可以参考本教程官网的“实验指南”栏目的“HDFS操作常用Shell命令”,使用Hadoop提供的Shell命令完成如下操作:(1)启动Hadoop,在HDFS中创建用户目录“/user/hadoop”......
  • DFS求LCA
    Updateon2023.7.17:该技巧目前已知的最早来源:skip2004。Updateon2023.7.17:比较时,取时间戳较小的结点也是正确的,不用记录深度。DFS序求LCA无论是从时间常数,空间常数还是好写程度方面均吊打欧拉序。定义DFS序表示对一棵树进行深度优先搜索得到的结点序列,而时间戳DF......
  • 搜索学习笔记+杂题 (基础二 dfs/bfs的拓展)
    搜索杂题:博客中讲述的题的题单:戳我二、dfs/bfs的各种变式1、深搜深搜以指数级的时间复杂度闻名,稍不注意时间就会爆炸,所以一般会用到剪枝的技巧(这个技巧基本上是因题而异,需要平时的刷题与积累)。深搜同样也是一种可变性极高的算法(其实都可以不叫做一种算法,深搜已经是一种做题的......
  • abc099d<dfs,枚举排列方案>
    题目D-GoodGrid思路用一个对角线上颜色相同,间隔3个对角线上颜色相同,一共分为3组;考虑在c种颜色中,选择3种,分配给这3组,共\(A(n,3)\)种选法;dfs枚举排列方案,对每种方案计算花费,取最优即可。总结dfs枚举排列方案;代码点击查看代码#include<iostream>#include<algor......