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 }
复制代码

 

posted @   may0113  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示