#include<bits/stdc++.h>
using namespace std;
//1-a 2-b 3-c 4-d 5-e 6-f 7-g
int e[10][10],vis[10];//e[i][j]=1表示边i和边j连通(并不是顶点)
int res;
set<set<int>>se;//用于去重路径
void add(int x,int y)
{
e[x][y]=1;
e[y][x]=1;
}
void dfs(int x,set<int> s)
{
if(!se.count(s))se.insert(s),res++; //如果该种结果没有被统计过
if(s.size()==7)return;//当边数达到7时,没有必要继续统计下去
for(int i=1;i<=7;i++){
//搜索其它边
if(!e[x][i]||vis[i])continue;
s.insert(i);
vis[i]=1;
dfs(i,s);
vis[i]=0;//recall
s.erase(i);
}
}
int main()
{
add(1,2);add(1,6);//a
add(2,7);add(2,3);//b
add(3,7);add(3,4);//c
add(4,5); //d
add(5,6);add(5,7);//e
add(6,7);//f
set<int>s;
for(int i=1;i<=7;i++){
s.insert(i);
vis[i]=1;
dfs(i,s);
vis[i]=0;
s.erase(i);
}
return cout<<res<<endl,0;
}
7セグメントコード-DFS、setを使用して重複を排除し、パスを保存します
おすすめ
転載: blog.csdn.net/weixin_43615816/article/details/114989743
おすすめ
ランキング