首页 > 其他分享 >搜索(DFS和BFS)

搜索(DFS和BFS)

时间:2023-07-31 21:22:21浏览次数:33  
标签:bfs tx ty int DFS BFS 搜索 啊啊啊 include

深搜是我最早学的算法,当然现在还没有信手拈来就是了。。。

为了更好地学树和图,只能回来刷搜索了。。。。。我已经搜了一天了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊(疯癫)

首先是今天去刷的八皇后问题,特别经典的搜索题,我记得我有一天深夜学算法就看了这个八皇后问题,其实深搜和广搜没有什么模板,就是纯暴力然后标记然后再暴力再标记。。。

调试调试应该没大问题,,,吧。

附上今天八皇后代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<queue>
 4 #include<cmath>
 5 #include<set>
 6 #include<vector>
 7 using namespace std;
 8 #define int long long
 9 #define endl '\n'
10 const int N = 1e3 + 10, inf = 0x3f3f3f3f3f3f3f3f;
11 int a[N], rr[N], cc[N], rc[N], cr[N];
12 int ans, n;
13 void print() {
14     if (ans <= 3) {
15         for (int i = 1; i <= n; i++)
16             cout << a[i] << " ";
17         cout << endl;
18     }
19 }
20 bool check(int r, int c) {
21     if (rr[r] || cc[c] || rc[r + c] || cr[r - c + n])return false;
22     rr[r] = 1; cc[c] = 1; rc[r + c] = 1; cr[r - c + n] = 1;
23     return true;
24 }
25 void cancel(int r, int c) {
26     rr[r] = 0; cc[c] = 0; rc[r + c] = 0; cr[r - c + n] = 0;
27 }
28 void dfs(int x) {
29     for (int i = 1; i <= n; i++) {
30         if (check(x, i)) {
31             a[x] = i;
32             if (x == n) {
33                 ans++;
34                 print();
35                 cancel(x, i);
36                 return;
37             }
38             dfs(x + 1);
39             cancel(x, i);
40         }
41     }
42 }
43 void solve() {
44     cin >> n;
45     dfs(1);
46     cout << ans;
47 }
48 signed main() {
49     ios::sync_with_stdio(false);
50     cin.tie(0);
51     cout.tie(0);
52     int t = 1;
53     //cin >> t;
54     while (t--) solve();
55     return 0;
56 }

一开始在check函数中我用的是stl中的set中的find来标记各种情况,但是最后t了,logn的时间复杂度不过如此。。。

后来发现可以直接用数组,,,我真蠢啊啊啊啊啊啊啊啊啊啊啊啊啊。。。

 

接下来是bfs,一开始这道我是用dfs做的,结果,样例都过不了,后来自习观察了一下,发现是一道bfs。。。我是真的菜。。。。

马的遍历,上代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 #define endl '\n'
 5 const int N = 1e3 + 10, inf = 0x3f3f3f3f3f3f3f3f;
 6 int a[N][N], nextt[8][2] = { {2,1},{-2,1},{-2,-1},{2,-1},{1,2},{1,-2},{-1,-2},{-1,2} };
 7 bool book[N][N];
 8 void bfs(int n,int m,int x,int y) {
 9     queue<pair<int,int>> q;
10     q.push(make_pair(x,y));
11     while (!q.empty()) {
12         x = q.front().first, y = q.front().second;
13         q.pop();
14         for (int i = 0; i < 8; i++) {
15             int tx = x + nextt[i][0], ty = y + nextt[i][1];
16             if (book[tx][ty] || tx > n || ty > m || tx < 1 || ty < 1)continue;
17             book[tx][ty] = true;
18             a[tx][ty] = a[x][y] + 1;
19             q.push(make_pair(tx, ty));
20         }
21     }
22 }
23 void solve() {
24     int n, m, x, y;
25     cin >> n >> m >> x >> y;
26     memset(a, -1, sizeof(a));
27     memset(book, false, sizeof(book));
28     book[x][y] = true;
29     a[x][y] = 0;
30     bfs(n,m,x,y);
31     for (int i = 1; i <= n; i++) {
32         for (int j = 1; j <= m; j++)
33             cout << a[i][j] << " ";
34         cout << endl;
35     }
36 }
37 signed main() {
38     ios::sync_with_stdio(false);
39     cin.tie(0);
40     cout.tie(0);
41     int t = 1;
42     //cin >> t;
43     while (t--) solve();
44     return 0;
45 }

突然发现bfs的代码和dijkstra的优先队列法有点一样???所以dijkstra是用bfs哦!!!!!!!!!!!!我个sb,写了那么久bfs,现在才发现那是bfs。。。

标签:bfs,tx,ty,int,DFS,BFS,搜索,啊啊啊,include
From: https://www.cnblogs.com/DLSQS-lkjh/p/17594421.html

相关文章

  • 二叉搜索树的最小绝对差
    给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。示例1:输入:root=[4,2,6,1,3]输出:1示例2:输入:root=[1,0,48,null,null,12,49]输出:1/***Definitionforabinarytreenode.*publiccl......
  • 【Matlab】基于KDtree的最近邻搜索和范围搜索
    摘要:介绍Matlab的rangesearch()函数和knnsearch()函数。rangesearch()——根据给定k-维数据集,返回指定距离范围内的所有数据点knnsearch()——根据给定k-维数据集,返回最近的K个数据点%%给定数值矩阵(inputdata),返回最近点的K个点%datamatrix,100x3,表示100个空间点......
  • 【题解】[ABC312G] Avoid Straight Line(容斥,树上统计,dfs)
    【题解】[ABC312G]AvoidStraightLine题目链接[ABC312G]AvoidStraightLine题意概述给定一棵\(n\)个节点的树,第\(i\)条边连接节点\(a_i\)和\(b_i\),要求找到满足以下条件的三元整数组\((i,j,k)\)的数量:\(1\lei<j<k\len\);对于树上任意一条简单路径,都不同时经......
  • Codeforces Round 105 (Div. 2) - D. Bag of mice DP 或 记忆化搜索 求概率
    D.Bagofmice题意待补充~思路可利用DP或者记忆化搜索求解本问题,实际上这两个方法等价。当\(w=0\)时必输当$w\ne0$但$b=0$时必赢剩下的情况,先考虑一个问题:赢的局面是怎么构成的?代码记忆化搜索//>>>Qiansui#include<bits/stdc++.h>#definelllong......
  • c++字符串搜索之KMP
    classSolution{private:voidgetNext(int*arr,stringstr){intlen=str.length();arr[0]=0;intj=0;for(inti=1;i<len;i++){while(j>0&&str[i]!=str[j]){......
  • 根据图片搜索excel
    问题描述:在excel使用中,当我们用大量的excel记录图文信息的时候,如果excel过多,比如成百上千个,里面都是包含大量的图片。这个时候如果想要根据图片快速找到这张图片可能被哪些excel包含,手动查找肯定比较繁琐,实际工作中我们发现很多使用excel这样记录信息的人都有这个烦恼,我们可以做一......
  • 利用Redis实现向量相似度搜索:解决文本、图像和音频之间的相似度匹配问题
    在自然语言处理领域,有一个常见且重要的任务就是文本相似度搜索。文本相似度搜索是指根据用户输入的一段文本,从数据库中找出与之最相似或最相关的一段或多段文本。它可以应用在很多场景中,例如问答系统、推荐系统、搜索引擎等。比如,当用户在知乎上提出一个问题时,系统就可以从知乎上......
  • 快捷搜索栏进行搜索,出现乱码问题
    参考修改以下内容: 图片中方法代码如下://[B72]HttpURLConnection garbled code,tiansheng 20230719 -b+       private static String getCharset(String type) {+               String[] typeArray = type.split(";");+       ......
  • P1219 八皇后 Checker Challenge(深度搜索dfs经典问题+回溯)
    题目连接:P1219[USACO1.5]八皇后CheckerChallenge-洛谷|计算机科学教育新生态(luogu.com.cn) 典型的深度优先搜索的问题----》先付代码再来跟新java组代码packagePTACZW;importjava.util.Scanner;importjava.io.*;importjava.util.Set;importjava.util.Has......
  • 基础算法思想与搜索枚举
    位运算常用运算符按位与&按位或|按位异或^取反~左移<<右移>>非负整数原码反码补码都一样!运算符优先级不清楚就打括号!C++运算符优先级应用场景用二进制位表示元素的存在情况题目要求进行位运算获取二进制的某一位intgetBit(inta,intb){return(......