记录编号 |
589241 |
评测结果 |
AWTWWWWWWW |
题目名称 |
勇者 |
最终得分 |
10 |
用户昵称 |
wdsjl |
是否通过 |
未通过 |
代码语言 |
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;
}