'commit'
This commit is contained in:
BIN
C++专题课程/深度优先搜索/DFS示意图.png
Normal file
BIN
C++专题课程/深度优先搜索/DFS示意图.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 117 KiB |
40
C++专题课程/深度优先搜索/POJ_1321.cpp
Normal file
40
C++专题课程/深度优先搜索/POJ_1321.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int n, k, vis[15], ans;
|
||||
char mat[15][15];
|
||||
|
||||
//cur : <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//num : <20>Ѿ<EFBFBD><D1BE>ڷŵ<DAB7><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void dfs(int cur, int num) {
|
||||
if (num == k) {
|
||||
ans++;
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = cur; i < n; i++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
if (mat[i][j] == '#' && !vis[j]) {
|
||||
vis[j] = 1;
|
||||
dfs(i + 1, num + 1);
|
||||
vis[j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
while (~scanf("%d %d%*c", &n, &k) && n != -1 && k != -1) {
|
||||
memset(vis, 0, sizeof(vis));
|
||||
int i;
|
||||
for (i = 0; i < n; i++)
|
||||
gets(mat[i]);
|
||||
|
||||
ans = 0;
|
||||
dfs(0, 0);
|
||||
printf("%d\n", ans);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
5
C++专题课程/深度优先搜索/data.in
Normal file
5
C++专题课程/深度优先搜索/data.in
Normal file
@@ -0,0 +1,5 @@
|
||||
0 0 1 0
|
||||
0 0 0 0
|
||||
0 0 1 0
|
||||
0 1 0 0
|
||||
0 0 0 1
|
||||
58
C++专题课程/深度优先搜索/【递归入门】组合+判断素数.cpp
Normal file
58
C++专题课程/深度优先搜索/【递归入门】组合+判断素数.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include<iostream>
|
||||
#include<cstring>
|
||||
using namespace std;
|
||||
|
||||
bool isprime(int n) {
|
||||
if (n<=1)
|
||||
return false;
|
||||
for (int i=2; i*i<=n; i++)
|
||||
if (n%i==0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int a[22];
|
||||
int b[22];
|
||||
int p[22];
|
||||
bool vis[22];
|
||||
int n,k,sum,ans;
|
||||
|
||||
void dfs(int index) {
|
||||
if (index==k+1) {
|
||||
if (isprime(sum))
|
||||
ans++;//<2F><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (int i=1; i<=index-1; i++)
|
||||
cout<<p[i]<<" ";
|
||||
cout<<endl;
|
||||
return ;
|
||||
}
|
||||
|
||||
for (int i=1; i<=n; i++) {
|
||||
if (vis[i]==false && i>p[index-1]) { //<2F><>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>㵼<EFBFBD>´𰸴<C2B4><F0B0B8B4><EFBFBD>
|
||||
p[index] = i;
|
||||
vis[i] = true;
|
||||
sum+=a[i];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵط<C4B5><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dfs(index+1);
|
||||
vis[i] = false;
|
||||
sum-=a[i];//<2F>мӾ<D0BC><D3BE>м<EFBFBD>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
memset(b,0,sizeof(b));
|
||||
memset(vis,0,sizeof(vis));
|
||||
cin>>n>>k;
|
||||
for (int i=1; i<=n; i++)
|
||||
cin>>a[i],p[i]=i;//һ<><D2BB>ʼҪ<CABC>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>봫ͳ<EBB4AB><CDB3>dfsȫ<73><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>仯
|
||||
|
||||
ans=0;
|
||||
|
||||
dfs(1);
|
||||
cout<<ans<<endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
//<2F><><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
26
C++专题课程/深度优先搜索/参考网址.txt
Normal file
26
C++专题课程/深度优先搜索/参考网址.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
DFS专题(入门,经典为主)
|
||||
https://blog.csdn.net/smhmzmh123/article/details/79066373
|
||||
|
||||
dfs经典例题(入门题)
|
||||
https://blog.csdn.net/qq_40511966/article/details/86539631
|
||||
|
||||
https://blog.csdn.net/qq_40763929/article/details/81629800
|
||||
|
||||
|
||||
问题 C: 【递归入门】组合+判断素数
|
||||
https://blog.csdn.net/smoggyxhdz/article/details/76166061
|
||||
|
||||
|
||||
最基础的练习题
|
||||
http://codeup.cn/contest.php?cid=100000608
|
||||
|
||||
全排列问题二
|
||||
https://blog.csdn.net/Light2Chasers/article/details/82215215
|
||||
|
||||
问题 E: 【递归入门】出栈序列统计
|
||||
http://codeup.cn/problem.php?cid=100000608&pid=4
|
||||
https://blog.csdn.net/xunalove/article/details/88414567
|
||||
|
||||
走迷宫
|
||||
http://codeup.cn/problem.php?cid=100000608&pid=5
|
||||
https://blog.csdn.net/qq_36502291/article/details/84678224
|
||||
33
C++专题课程/深度优先搜索/最简全排列.cpp
Normal file
33
C++专题课程/深度优先搜索/最简全排列.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include<iostream>
|
||||
#include<cmath>
|
||||
using namespace std;
|
||||
|
||||
int p[10]= {0};
|
||||
bool vis[10]= {0};
|
||||
int n;
|
||||
void dfs(int x) {
|
||||
if (x==n+1) {
|
||||
for(int i=1; i<=n; i++)
|
||||
cout<<p[i]<<" ";
|
||||
cout<<endl;
|
||||
return ;
|
||||
}
|
||||
|
||||
for (int i=1; i<=n; i++) {
|
||||
if (vis[i]==false ) {
|
||||
p[x] = i;
|
||||
vis[i] = true;
|
||||
dfs(x+1);
|
||||
vis[i] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
while (cin>>n) {
|
||||
dfs(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
1
C++专题课程/深度优先搜索/棋盘问题板子题.txt
Normal file
1
C++专题课程/深度优先搜索/棋盘问题板子题.txt
Normal file
@@ -0,0 +1 @@
|
||||
https://www.jianshu.com/p/53e51475c150
|
||||
204
C++专题课程/深度优先搜索/深度优先搜索-带完整路径.cpp
Normal file
204
C++专题课程/深度优先搜索/深度优先搜索-带完整路径.cpp
Normal file
@@ -0,0 +1,204 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ṹ<EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD>ߣ<EFBFBD><DFA3>ƺ<EFBFBD>
|
||||
* ʱ<>䣺2019-11-17
|
||||
*/
|
||||
struct Node {
|
||||
int x, y;
|
||||
|
||||
Node(int a, int b) {
|
||||
x = a;
|
||||
y = b;
|
||||
}
|
||||
};
|
||||
|
||||
//<2F><>ͼ<EFBFBD><CDBC>С<EFBFBD><D0A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>㷽<EFBFBD><E3B7BD><EFBFBD>洢
|
||||
#define SIZE 100
|
||||
|
||||
//<2F><>
|
||||
const int d[4][2] = {
|
||||
{-1, 0},
|
||||
{0, -1},
|
||||
{1, 0},
|
||||
{0, 1}};
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ͼ<EFBFBD><CDBC>Flase<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>True:<3A><><EFBFBD><EFBFBD><EFBFBD>ߡ<EFBFBD>
|
||||
bool _map[SIZE][SIZE];
|
||||
|
||||
//<2F><><EFBFBD>ǵ<EFBFBD>Ҫͼ<D2AA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>һ<EFBFBD><D2BB>ԭͼ<D4AD><CDBC>
|
||||
char pic[SIZE][SIZE];
|
||||
|
||||
//<2F>Dz<EFBFBD><C7B2>Ƿ<EFBFBD><C7B7>ʹ<EFBFBD>?
|
||||
bool visit[SIZE][SIZE];
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>·<EFBFBD><C2B7>
|
||||
vector<Node> path;
|
||||
|
||||
//ȫ<><C8AB>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
vector<vector<Node> > allpath;
|
||||
|
||||
//<2F><>ͼ m:<3A>У<EFBFBD>n:<3A><>
|
||||
int m, n;
|
||||
|
||||
//S:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,T:<3A>յ<EFBFBD> <20><><EFBFBD><EFBFBD>ôsx,sy<73><79><EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬tx,ty<74><79><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int sx, sy, tx, ty;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void dfs(int x, int y) {
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>յ<EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD>ôx=tx,y=ty
|
||||
if (x == tx && y == ty) {
|
||||
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
path.push_back(Node(x, y));
|
||||
|
||||
//<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
allpath.push_back(path);
|
||||
|
||||
//<2F>˳<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>һ<EFBFBD>γ<EFBFBD><CEB3><EFBFBD>,<2C><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>еĿ<D0B5><C4BF>ܶ<EFBFBD><DCB6>ҵ<EFBFBD><D2B5><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>Ա<EFBFBD><D4B1>ҵ<EFBFBD><D2B5><EFBFBD>С<EFBFBD><D0A1>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD>Ҫ<EFBFBD><D2AA>ͣ<EFBFBD>Ļ<EFBFBD><C4BB>ˣ<EFBFBD>
|
||||
path.pop_back();
|
||||
return;
|
||||
}
|
||||
if (!_map[x][y]) return; //<2F><><EFBFBD><EFBFBD><EFBFBD>߾Ͳ<DFBE><CDB2><EFBFBD>
|
||||
if (visit[x][y]) return; //<2F>߹<EFBFBD><DFB9><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><>¼<EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(·<><C2B7>)
|
||||
path.push_back(Node(x, y));
|
||||
//<2F><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
dfs(xx, yy);
|
||||
}
|
||||
visit[x][y] = 1;
|
||||
//<2F>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
int xx = x + d[i][0], yy = y + d[i][1];
|
||||
//<2F>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD>
|
||||
//<2F><>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ȡ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD>δû<CEB4><C3BB><EFBFBD>߹<EFBFBD>
|
||||
visit[x][y] = 0;
|
||||
path.pop_back();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
||||
* <20><><EFBFBD>ߣ<EFBFBD><DFA3>ƺ<EFBFBD>
|
||||
* ʱ<>䣺2019-11-17
|
||||
* @param x
|
||||
*/
|
||||
void showpath(vector<Node> x) {
|
||||
char s[SIZE][SIZE];
|
||||
for (int i = 0; i < n; ++i) {
|
||||
strcpy(s[i], pic[i]);
|
||||
}
|
||||
for (int i = 0; i < x.size(); ++i) {
|
||||
s[x[i].x - 1][x[i].y - 1] = '+';
|
||||
}
|
||||
for (int i = 0; i < m; ++i) puts(s[i]);
|
||||
printf("step = %d\n", x.size() - 1);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>١<EFBFBD>
|
||||
bool cmp(vector<Node> x, vector<Node> y) {
|
||||
return x.size() < y.size();
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
//<2F><>ȡm:<3A>У<EFBFBD>n:<3A><>
|
||||
scanf("%d %d", &m, &n);
|
||||
|
||||
//<2F><>ν<EFBFBD><CEBD>ʼֵ<CABC><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڵ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ҵ<EFBFBD>S<EFBFBD><53>T<EFBFBD><54>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>sx,sy,tx,ty<74>ĸ<EFBFBD>ֵ<EFBFBD><D6B5>
|
||||
//<2F>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD>ڣ<EFBFBD>
|
||||
sx = 1; //<2F><>ʼֵ
|
||||
sy = 1; //<2F><>ʼֵ
|
||||
|
||||
//<2F>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD>ڣ<EFBFBD>
|
||||
tx = m; //<2F><>ʼֵ
|
||||
ty = n; //<2F><>ʼֵ
|
||||
|
||||
//<2F><><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>m<EFBFBD><6D>
|
||||
for (int i = 0; i < m; i++) {
|
||||
scanf("%s", pic[i]); //<2F><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͼ
|
||||
char s[SIZE];
|
||||
strcpy(s, pic[i]);//<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ݵ<EFBFBD>s<EFBFBD><73>
|
||||
|
||||
//<2F><><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
||||
for (int j = 0; j < n; j++) {
|
||||
//ȡ<><C8A1><EFBFBD><EFBFBD>ǰֵ
|
||||
char c = s[j];
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>
|
||||
if (c == 'S') {
|
||||
sx = i + 1;
|
||||
sy = j + 1;
|
||||
_map[i + 1][j + 1] = true;
|
||||
}//<2F>յ<EFBFBD>
|
||||
else if (c == 'T') {
|
||||
tx = i + 1;
|
||||
ty = j + 1;
|
||||
_map[i + 1][j + 1] = true;
|
||||
}//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else if (c == '#') {
|
||||
_map[i + 1][j + 1] = false;
|
||||
} else//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
_map[i + 1][j + 1] = true;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨
|
||||
dfs(sx, sy);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (allpath.size() == 0) {
|
||||
printf("û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
} else {
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵķ<D9B5><C4B7><EFBFBD>
|
||||
sort(allpath.begin(), allpath.end(), cmp);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD>
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><EFBFBD><EFBFBD>:\n");
|
||||
showpath(allpath[0]);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0B7BD>
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:\n");
|
||||
for (int i = 1; i < allpath.size(); ++i) {
|
||||
showpath(allpath[i]);
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %d\n", allpath.size());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
https://blog.csdn.net/szdytom/article/details/87537876
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
5 6
|
||||
....S#
|
||||
.##...
|
||||
.#..#.
|
||||
#..##.
|
||||
.T....
|
||||
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
4 4
|
||||
S.##
|
||||
..##
|
||||
#..#
|
||||
##.T
|
||||
|
||||
|
||||
5 6
|
||||
....S#
|
||||
.##...
|
||||
.#..#.
|
||||
#..##.
|
||||
.T....
|
||||
|
||||
*/
|
||||
88
C++专题课程/深度优先搜索/解救小哈之读取数据文件.cpp
Normal file
88
C++专题课程/深度优先搜索/解救小哈之读取数据文件.cpp
Normal file
@@ -0,0 +1,88 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
//最小步数
|
||||
int _min = INT_MAX;
|
||||
|
||||
//行数
|
||||
const int n = 5;
|
||||
//列数
|
||||
const int m = 4;
|
||||
|
||||
//小哈位置x坐标+y坐标
|
||||
const int p = 2;
|
||||
const int q = 3;
|
||||
|
||||
//地图
|
||||
int a[n][m];
|
||||
|
||||
//标记数组,哪个走过了?
|
||||
int book[n][m];
|
||||
|
||||
|
||||
/**
|
||||
* 功能:深度优先搜索走迷宫
|
||||
* 作者:黄海
|
||||
* 时间:2019-11-17
|
||||
* @param x
|
||||
* @param y
|
||||
* @param step
|
||||
*/
|
||||
void dfs(int x, int y, int step) {
|
||||
int next[4][2] = {
|
||||
{0, 1},//向右走
|
||||
{1, 0},//向下走
|
||||
{0, -1},//向左走
|
||||
{-1, 0},//向上走
|
||||
};
|
||||
int tx, ty, k;
|
||||
if (x == p && y == q) //判断是否到达小哈的位置
|
||||
{
|
||||
if (step < _min)
|
||||
_min = step; //更新最小值
|
||||
return;
|
||||
}
|
||||
/*枚举四种走法*/
|
||||
for (k = 0; k <= 3; k++) {
|
||||
/*计算下一个点的坐标*/
|
||||
tx = x + next[k][0];
|
||||
ty = y + next[k][1];
|
||||
if (tx < 0 || tx > n - 1 || ty < 0 || ty > m - 1) //判断是否越界
|
||||
continue;
|
||||
/*判断该点是否为障碍物或者已经在路径中*/
|
||||
if (a[tx][ty] == 0 && book[tx][ty] == 0) {
|
||||
book[tx][ty] = 1; //标记这个点已经走过
|
||||
dfs(tx, ty, step + 1); //开始尝试下一个点
|
||||
book[tx][ty] = 0; //尝试结束,取消这个点的标记
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
int main() {
|
||||
//起点和终点坐标
|
||||
int startx = 0;
|
||||
int starty = 0;
|
||||
|
||||
//从文件中读取地图数据
|
||||
string file = "../data.in";
|
||||
//fstream 流方法读数据
|
||||
ifstream fin(file);
|
||||
|
||||
//读取地图
|
||||
for (int i = 0; i < n; i++)
|
||||
for (int j = 0; j < m; j++)
|
||||
fin >> a[i][j];
|
||||
|
||||
//关闭文件
|
||||
fin.close();
|
||||
fin.clear(ios::goodbit);
|
||||
|
||||
/*从起点开始搜索*/
|
||||
book[startx][starty] = 1; //标记起点已经在路径中,防止后面重复走
|
||||
|
||||
dfs(startx, starty, 0); //第一个参数是起点的x坐标,以此类推是起点的y坐标,初始步数为0
|
||||
printf("%d", _min); //输出最短步数
|
||||
return 0;
|
||||
}
|
||||
31
C++专题课程/深度优先搜索/顺序输出全排列.cpp
Normal file
31
C++专题课程/深度优先搜索/顺序输出全排列.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
#include<iostream>
|
||||
#include<cmath>
|
||||
using namespace std;
|
||||
|
||||
int p[10]= {0};
|
||||
bool vis[10]= {0};
|
||||
int n;
|
||||
void dfs(int x) {
|
||||
if (x==n+1) {
|
||||
for(int i=1; i<=n; i++)
|
||||
cout<<p[i]<<" ";
|
||||
cout<<endl;
|
||||
return ;
|
||||
}
|
||||
//˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>֦<EFBFBD><D6A6>
|
||||
for (int i=1; i<=n; i++) {
|
||||
if (vis[i]==false && i>p[x]) { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬Ҳ<EBA3AC><D2B2><EFBFBD>Ǽ<EFBFBD>֦<EFBFBD><D6A6><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵݹ<C4B5>
|
||||
p[x] = i;
|
||||
vis[i] = true;
|
||||
|
||||
dfs(x+1);
|
||||
vis[i] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
n=4;
|
||||
dfs(1);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user