深度优先搜索--DFS
来源:互联网 发布:海岛奇研究所升级数据 编辑:程序博客网 时间:2024/04/18 10:20
深度优先搜索
dfs思想
解决当下如何做,下一步如何做和当下如何做一样。
要求
求1~n的全排列。
代码
#include <stdio.h>#define N 3int a[10];int book[10];void dfs(int step) { int i; if (step == N + 1) { for (i = 1; i <= N; ++i) { printf("%d ", a[i]); } printf("\n"); return; } for (i = 1; i <= N; ++i) { if (book[i] == 0) { a[step] = i; book[i] = 1; dfs(step+1); book[i] = 0; } } return;}int main() { dfs(1); return 0;}
要求
在括号中填入1~9的数字,使等式成立,每个数字只能使用一次。
[ ][ ][ ] + [ ][ ][ ] = [ ][ ][ ]
代码
#include <stdio.h>int a[10];int book[10];int sum;void dfs(int step) { int i; if (step == 10) { if (a[1]*100 + a[2]*10 + a[3] + a[4]*100 + a[5]*10 + a[6] == a[7]*100 + a[8]*10 + a[9]) { sum++; printf("%d%d%d + %d%d%d = %d%d%d \n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]); } return; } for (i = 1; i <= 9; ++i) { if (book[i] == 0) { a[step] = i; book[i] = 1; dfs(step+1); book[i] = 0; } }}int main() { dfs(1); printf("%d \n", sum / 2); return 0;}
要求
求迷宫中从坐标(0, 0)到(3,2)最少步数?
0代表路,1代表障碍物,2标识走过的路径,3代表目标点。
代码
#include <stdio.h>#define N 5#define M 4int min = 99999999;int a[N][M] = { {0, 0, 1, 0}, {0, 0, 0, 0}, {0, 0, 1, 0}, {0, 1, 3, 0}, {0, 0, 0, 1} };void print_a() { for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { printf("%d ", a[i][j]); } printf("\n"); } printf("\n");}void dfs(int x, int y, int step) { if (a[x][y] == 3) { printf("--------------- step : %d\n", step); print_a(); if (step < min) { min = step; } return; } a[x][y] = 2; // 走过的点标记为2 if((a[x][y+1] == 0 || a[x][y+1] == 3) && y+1 < M) { // right dfs(x, y+1, step+1); } if((a[x+1][y] == 0 || a[x+1][y] == 3) && x+1 < N) { // down dfs(x+1, y, step+1); } if((a[x][y-1] == 0 || a[x][y-1] == 3) && y-1 >= 0) { // left dfs(x, y-1, step+1); } if((a[x-1][y] == 0 || a[x-1][y] == 3) && x-1 >= 0) { // up dfs(x-1, y, step+1); } a[x][y] = 0; // 取消标记}int main() { dfs(0, 0, 0); printf("min: %d \n", min); return 0;}
0 0
- 深度优先搜索 DFS
- 深度优先搜索 DFS
- DFS 深度优先搜索
- DFS 深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- DFS深度优先搜索
- 深度优先搜索(DFS)
- dfs深度优先搜索
- dfs 深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- DFS深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- 深度优先搜索(DFS)
- 深度优先搜索--DFS
- 第十四周 项目1:数组大折腾(4)
- 循环语句_函数_java学习4
- 期末考试之排名次
- oracle导出数据,备份及恢复数据,及数据库日志文件的查看
- 《视频直播技术详解》系列之四:推流和传输
- 深度优先搜索--DFS
- 远程运维(监控)系统概念——云
- 王朝 第十四周 学生成绩系统
- 第X大的数
- 广度优先搜索--BFS
- c/cpp中生成随机数
- 第十四周拓展项目1—数组大折腾(5)
- 文章标题
- WeakHashMap的使用