nx

深度优先搜索(DFS)和广度优先搜索(BFS)求解迷宫问题

白昼怎懂夜的黑 提交于 2019-12-01 17:19:53
用下面这个简单的迷宫图作为例子: OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOXXOOOX XOOOOXOO XXXXXXXO O为通路,X为障碍物。 深度优先搜索就像是一条路走到黑,走到黑,黑了再回来。有种递归的感觉。 深度优先搜索(DFS) 1 #include<iostream> 2 using namespace std; 3 4 char a1[] = {'O','X','X','X','X','X','X','X','\0'}; 5 char a2[] = {'O','O','O','O','O','X','X','X','\0'}; 6 char a3[] = {'X','O','X','X','O','O','O','X','\0'}; 7 char a4[] = {'X','O','X','X','O','X','X','O','\0'}; 8 char a5[] = {'X','O','X','X','X','X','X','X','\0'}; 9 char a6[] = {'X','O','X','X','O','O','O','X','\0'}; 10 char a7[] = {'X','O','O','O','O','X','O','O','\0'}; 11 char a8[] = {'X','X','X'

搜索 引水入城 1514

£可爱£侵袭症+ 提交于 2019-12-01 16:59:51
题目链接 题目来自洛谷1514 引水入城 很清新的一道搜索题,先造出每个蓄水厂的可浇灌区间,因为如果区间不连贯,必定会出现交叉相灌的情况,交叉意味着两条路都能走,假设不成立。 再贪心求得最小覆盖值,值得一说的是贪心用的方法是跳过大区间内包含的小区间,直到下一个与上一个r值不相交l值出现时答案才加一。 其他没什么好说的了。 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int ans=99999999,maxn=99999999; int m,n,cnt,fl,now; int be[502],a[502][502],v[502][502]; struct llo{ int l,r; } e[503],d[503]; int cmp(llo x,llo y){ if(x.l==y.l) return x.r>y.r; return x.l<y.l; } void fugai(int num,int nx,int ny){ v[nx][ny]=1; if(nx==n){ be[ny]=1; e[num].l=min(e[num].l,ny); e[num].r=max(e[num].r,ny); } if(nx!=1&&a[nx][ny

搜索 靶型数独 1074

北战南征 提交于 2019-12-01 08:33:00
题目链接 题目叫靶型数独,洛谷题号1074; 题目描述:要求在9*9宫格内填满数,分好的每个3*3宫格1到9数字不能重复,每行每列数字不能重复。 思想:dfs搜索。 我一开始想的是从头开始搜,每到一个格子,搜当前行当前列当前块块,把不能用的数标记。可是我没想到怎么同时维护当前行列坐标信息和选了哪一个(当然现在想到了),到最后到最后一个0时计算所有数值答案。反正思路极其混乱,然后看了有位叫做别人的大佬的代码深深折服,很清晰简略。当然这都是后话。 还是讲讲思路吧。 规定每个块,每行每列的编号,hang[i][j],lie[i][j],gong[i][j]==1表示i这个行/列/块的j数值已经有数存在了。 cnt表示0的标号,s数组记录每个0的行、列、块、价值信息方便用。 dfs函数写的非常简单。have提前计算已有价值。 其中算得上剪枝的是把每行0从小到大搜索,因为dfs是树形结构,深度小的越少搜索的数量越少。 找每个点的权值时利用了如果是第一层就会在第二层之前return,因此不用因为形如(2,1)这类点写一堆特判。 值得一提的是我最后忘了特判-1了,一直95分,非常的智障。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; long

【刷题】【最短路】新年好

久未见 提交于 2019-12-01 07:59:05
重庆城里有n个车站,m条双向公路连接其中的某些站。每两个车站最多用一条公路直接相连,从任何一个车站出发都可以经过一条或多条公路到达其它车站,但不同的路径需要花费的时间可能不同。在一条路径上花费的时间等于路径上所有公路需要的时间和。 佳佳的家在车站1,他有五个亲戚,分别住在车站a、b、c、d、e。过年了,他需要从自己的家出发,拜访每个亲戚(顺序任意),给他们送去节日的祝福。怎样走,才需要最少的时间? 用最短路算法,求出5个点分别的距离,和1到五个点的距离, 然后枚举完事 #include<cstdio> #include<cstdlib> #include<cstring> #include<queue> using namespace std; int n,m; const int N=5e4+3,M=1e5+3; int tot,head[N]; struct node { int v,w,nx; }e[M<<1]; void add(int u,int v,int w) { e[++tot].v =v,e[tot].w =w,e[tot].nx =head[u],head[u]=tot; e[++tot].v =u,e[tot].w =w,e[tot].nx =head[v],head[v]=tot; } inline int read() { int x=0;char c

UVA11846 找座位

天大地大妈咪最大 提交于 2019-12-01 07:27:22
1 #include<cstdlib> 2 #include<algorithm> 3 #include<iostream> 4 #include<cstdio> 5 #include<cstring> 6 using namespace std; 7 8 //写小组类(组长坐标,可能的位置) 9 //先循环确定各小组的可能位置数 10 //X操作: 确定位置数为一的小组,更新地图,更新位置数非一的小组。循环(位置数小于一则无解) 11 //当某次循环后所有小组位置数均大于一(进入dfs循环) 12 //两种操作1:假定一个小组位置,继续X操作 2:枚举所有小组位置可能的情况,判断是否冲突 13 //这里用第一个方法,第一个要回溯,map数组在函数中重建,这样不影响X操作对map数组的改变 14 15 struct xz 16 { 17 int x, y; 18 int n; 19 int ant; 20 int Nx[30], Ny[30], Tx[30], Ty[30];//形状和队长位置 21 }; 22 23 const int MAXN = 20; 24 int n, k, Map; 25 26 int map[20][20]; 27 xz XZ[30]; 28 29 void init(xz *qwe) 30 { 31 Map = 0; 32 memset(map,

【CSP模拟赛】独立集(最长上升子序列&大力猜结论)

随声附和 提交于 2019-12-01 05:01:11
题目描述 有一天,一个名叫顺旺基的程序员从石头里诞生了。又有一天,他学会了冒泡排序和独 立集。在一个图里,独立集就是一个点集,满足任意两个点之间没有边。于是他就想把这两 个东西结合在一起。众所周知,独立集是需要一个图的。那么顺旺基同学创造了一个算法, 从冒泡排序中产生一个无向图。 这个算法不标准的伪代码如下: void bubblesortgraph(n,a[]) //输入:点数n,1到n的全排列a //输出:一个点数为n的无向图G {// 创建一个有n个点,0条边的无向图G。 do{ swapped=false for i 从1 到n-1 if(a[i]>a[i+1]) { //在G中连接点a[i]和点a[i+1] //交换a[i]和a[i+1] swapped =true } }while(swapped); //输出图G。 } //结束。 那么我们要算出这个无向图G最大独立集的大小。但是事情不止于此。顺旺基同学有时候心情会不爽,这个时候他就会要求你再回答多一个问题:最大独立集可能不是唯一的,但 有些点是一定要选的,问哪些点一定会在最大独立集里。今天恰好他不爽,被他问到的同学 就求助于你了。 输入格式 输入包含两行,第一行为N,第二行为1 到N 的一个全排列。 输出格式 输出包含两行,第一行输出最大独立集的大小,第二行从小到大输出一定在最大独立集 的点的编号。 输入样例 3 3

Redis源码剖析--字符串t_string实现

大城市里の小女人 提交于 2019-12-01 03:18:23
介绍完Redis的底层数据结构之后, 介绍我们平时使用Redis的时候可以直接看到五种数据结构:字符串、哈希、链表、集合和有序集合。 首先介绍字符串t_string的实现。 字符串的结构 上一篇文章讲到过字符串的底层实现其实有三种编码: 类型 编码 对象 REDIS_STRING REDIS_ENCODING_INT 使用整数值实现的字符串对象。 REDIS_STRING REDIS_ENCODING_EMBSTR 使用 embstr 编码的简单动态字符串实现的字符串对象。 REDIS_STRING REDIS_ENCODING_RAW 使用简单动态字符串实现的字符串对象。 这三种类型分别对应的底层数据结构为int,embstr, sds。 字符串的定义代码如下: typedef struct redisObject { //对象的数据类型,字符串对象应该为 OBJ_STRING unsigned type: 4 ; //对象的编码类型,分别为OBJ_STRING、OBJ_ENCODING_INT或OBJ_ENCODING_EMBSTR unsigned encoding: 4 ; //LRU_BITS为24位,最近一次的访问时间 unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */ //引用计数

LOJ 2013 幸运数字

╄→гoц情女王★ 提交于 2019-11-30 19:48:33
题意: https://loj.ac/problem/2013 sol: 用点分治每次处理lca在分治重心上的询问,对于每个询问都单独开个表挂在其中一个点上 树剖和倍增都是3个log,需要卡常(其实是复杂度不对),点分治处理路径是$\log w \log n$,然后每个点上的询问会被搞q次 如果回答询问的话是$\log w^2$的复杂度,总复杂度$n \log n\log w+q\log w^2$ 点分代码: #include<cstdio> #include<cstring> #include<algorithm> #include<vector> const int N = 2e4+7; typedef long long LL; #define R register #define debug printf("GG\n") #define cer(x) printf("%d\n", x) int last[N], cnt; std :: vector<int> G[N], Q[N]; inline int max(int a, int b) { return a > b ? a : b; } struct Edge { int to, nxt; } e[N*2]; inline void add(int u, int v) { e[++cnt].nxt = last[u],

[一本通学习笔记] 广度优先搜索和优化

邮差的信 提交于 2019-11-30 15:56:15
BFS的题目没什么好说的,通常优化都是判断可行性,或者状压以后记忆化。几道例题都非常基础。 #10027. 「一本通 1.4 例 2」魔板 暴力写出置换即可。 #include <bits/stdc++.h> using namespace std; int buf[9],tar,ans,src; char vis[99999999]; map <int,string > sta; void A() { swap(buf[1],buf[5]); swap(buf[2],buf[6]); swap(buf[3],buf[7]); swap(buf[4],buf[8]); } void B() { int t1=buf[4], t2=buf[8]; buf[4]=buf[3]; buf[8]=buf[7]; buf[3]=buf[2]; buf[7]=buf[6]; buf[2]=buf[1]; buf[6]=buf[5]; buf[1]=t1; buf[5]=t2; } void C() { int t=buf[2]; buf[2]=buf[6]; buf[6]=buf[7]; buf[7]=buf[3]; buf[3]=t; } int compress() { int ret = 0; for(int i=1;i<=8;i++) ret=ret*10+buf[i]; return

模板—Hash_map

别说谁变了你拦得住时间么 提交于 2019-11-30 15:45:23
struct Hash_map { int siz,fi[2872897],nx[1000000]; int sta[1000000];double val[1000000]; inline double &operator [] (int x) { int k=x%2872897,i=fi[k]; for(;i&&sta[i]!=x;i=nx[i]); if(!i)i=++siz,nx[i]=fi[k],fi[k]=i,val[i]=0,sta[i]=x; return val[i]; } }f[31]; unoredred_map稍慢。 来源: https://www.cnblogs.com/Al-Ca/p/11601646.html