题意:找一条四边的路径,保住中间两个节点编号只能出现一次(起点(首)和终点(未)可以一样)
else{
if(k==3&&to==Begin){//首未一样的情况(前提是未已经是四边的最后一点了)
dfs(to,k+1);
}
ACcode:文章来源:https://www.toymoban.com/news/detail-611173.html
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e4+10;
vector<int>v[N];
bool vis[N];
int n,m,cnt,Begin;
void dfs(int u,int k){
if(k==4){//结束,找到
cnt++;
return;
}
for(auto to:v[u]){
if(!vis[to]){
vis[to]=true;
dfs(to,k+1);
vis[to]=false;
}
else{
if(k==3&&to==Begin){//首未一样的情况(前提是未已经是四边的最后一点了)
dfs(to,k+1);
}
}
}
}
void solve(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,vv;
cin>>u>>vv;
v[u].push_back(vv);
v[vv].push_back(u);
}
for(int i=1;i<=n;i++){
vis[i]=true;
Begin=i;
dfs(i,1);
vis[i]=false;
}
cout<<cnt<<"\n";
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int tt=1;
//cin>>tt;
while(tt--)
solve();
return 0;
}
over~文章来源地址https://www.toymoban.com/news/detail-611173.html
到了这里,关于P8605 [蓝桥杯 2013 国 AC] 网络寻路 (dfs+理解题意)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!