侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

1491. 圆桌座位

Hope
2022-04-07 / 0 评论 / 0 点赞 / 384 阅读 / 547 字
温馨提示:
本文最后更新于 2022-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1491. 圆桌座位

思路:

g数组存两个数字的关系,这里这样开辟bool数组确实好一点,比直接存关系要好,然后st数组维护每个数字是否别用过了,搜索顺序是每个位置,枚举的是可以放哪个人。

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 15;
int pos[N];
bool st[N],g[N][N];
int n,m;

int dfs(int u){
    if(u == n){
        if(!g[pos[n - 1]][pos[0]]) return 1;
        return 0;
    }
    
    int res = 0;
    //搜索为位置可以放哪个人
    for(int i = 2; i <= n; i++){
        if(!st[i] && !g[i][pos[u - 1]]){
            st[i] = true;
            pos[u] = i;
            res += dfs(u + 1);
            st[i] = false;
        }
    }
    return res;
}

int main(){
    cin>>n>>m;
    while(m--){
        int a,b;
        cin>>a>>b;
        g[a][b] = g[b][a] = true;
    }
    pos[0] = 1;
    st[1] = true;
    cout<<dfs(1)<<endl;
    return 0;
}

0

评论区