ACM板子 第三章 搜索与图论
1.DFS
【1.1】排列数字
#include<iostream> using namespace std; const int N=10; int n; int path[N]; bool st[N]; void dfs(int u) { if(u==n)//到了第n层则输出 { for(int i=0;i<n;i++) cout<<path[i]<<' '; cout<<endl; return; } for(int i=1;i<=n;i++) { if(!st[i])//如果这个位置没有被用过 { path[u]=i;//把i放在当前位置 st[i]=true;//并且i已经被用过了 dfs(u+1);//递归到下一层 st[i]=false;//恢复现场 } } } int main() { cin>>n; dfs(0); }
【1.2】N皇后问题
1 #include <iostream> 2 using namespace std; 3 const int N = 20; 4 int n; 5 char g[N][N]; 6 bool col[N], dg[N], udg[N]; 7 void dfs(int u) 8 { 9 if (u == n) 10 { 11 for (int i = 0; i < n; i ++ ) puts(g[i]); 12 puts(""); 13 return; 14 } 15 for (int i = 0; i < n; i ++ ) 16 if (!col[i] && !dg[u + i] && !udg[n - u + i]) 17 { 18 g[u][i] = 'Q'; 19 col[i] = dg[u + i] = udg[n - u + i] = true; 20 dfs(u + 1); 21 col[i] = dg[u + i] = udg[n - u + i] = false; 22 g[u][i] = '.'; 23 } 24 } 25 26 int main() 27 { 28 cin >> n; 29 for (int i = 0; i < n; i ++ ) 30 for (int j = 0; j < n; j ++ ) 31 g[i][j] = '.'; 32 dfs(0); 33 return 0; 34 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现