记录编号 589241 评测结果 AWTWWWWWWW
题目名称 勇者 最终得分 10
用户昵称 Gravatarwdsjl 是否通过 未通过
代码语言 C++ 运行时间 3.000 s
提交时间 2024-07-04 13:05:08 内存使用 0.57 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int Mod = 1000000007;
const int N = 20;

int g[N][N],n,m,cnt,vis[N];

void check(){
    memset(g,0x3f,sizeof(g));
    for(int i=1;i<=n;i++)g[i][i]=0;
    vis[0]=1;
    for(int i=1;i<=m;i++){
        g[vis[i-1]][vis[i]]=1;
    }
     for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=n;k++){
                if(g[j][k]>g[j][i]+g[i][k])g[j][k]=g[j][i]+g[i][k];
            }
        }
    }
//    for(int i=1;i<=m;i++)cout<<vis[i]<<" ";
//    cout<<endl; 
//    for(int i=1;i<=n;i++){
//        for(int j=1;j<=n;j++){
//            cout<<g[i][j]<<" ";
//        }
//        cout<<endl;
//    }
//    cout<<endl<<endl;
    int boo=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(g[i][j]>=0x3f3f3f3f){
                boo=0;
                break;
            }
        }
        if(boo==0)break;
    }
//    cout<<"boo:"<<boo<<endl;
    cnt+=boo;
    cnt%=Mod;
}

void dfs(int now_i,int idx){//现在的点的编号走了几步 
     if(idx==m){
         check();
         return ;
     }
     for(int i=1;i<=n;i++){
         if(i==now_i)continue;
//         g[now_i][i]=1;
//         cout<<now_i<<" "<<i<<endl;
         vis[idx+1]=i;
         dfs(i,idx+1);
         vis[idx+1]=0;
//         g[now_i][i]=0x3f3f3f3f;
     }
}

int main(){
    freopen("rotk.in","r",stdin);
    freopen("rotk.out","w",stdout);
    scanf("%d%d",&n,&m);
    if(n==m){
        cout<<2<<endl;
        return 0;
    }
    dfs(1,0); 
    printf("%d",cnt); 
    return 0;
}