zoukankan      html  css  js  c++  java
  • 【搜索】Atcoder-ABC1873-C-Travel【全排列】

    传送门

    C - Travel

    题意

    寻找从起点1开始,经过所有点1次,再次回到起点1,权值总和为k次数。

    思路

    由于N(N<8)很小,枚举全排列即可。

    AC代码

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimization("unroll-loops")
    
    #include<bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int INF = 0x3f3f3f3f;
    const int mod = 1e9+7;
    const int maxn =10;
                            
    int a[maxn][maxn];
    int b[maxn];
    int n,k;
    bool vis[maxn];
    int ans = 0;
    void dfs(int cnt){
    	if(cnt>n){
            if(b[1]!=1) return ;
            int sum = 0;
    		for(int i = 1; i <= n-1; i++){
                sum += a[b[i]][b[i+1]];
            }
            sum += a[b[n]][b[1]];
    		if(sum==k) ans++;
    		return ;
    	}
    	for(int i = 1; i <= n; i++){
    		if(vis[i]==0){
    			vis[i] = 1;
    			b[cnt] = i;
    			dfs(cnt+1);
    			vis[i] = 0;
    		}
    	}
    	return ;
    }
    int main(void){
        #ifndef ONLINE_JUDGE
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
        #endif
        cin >> n >> k;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                cin >> a[i][j];
            }
        }
        dfs(1);
        cout<<ans<<endl;
        return 0;
    }
    
  • 相关阅读:
    Python-异常处理
    进程及其状态
    操作系统基础
    计算机组成基础
    Java wait()、notify()、notifyAll()方法
    Java 死锁
    线程同步
    Java 创建多线程
    Java 接口
    抽象类和抽象方法
  • 原文地址:https://www.cnblogs.com/AC-AC/p/13984150.html
Copyright © 2011-2022 走看看