最后一个超时啦,求救!
查看原帖
最后一个超时啦,求救!
257318
BugManMax楼主2024/4/30 14:01
#include<iostream>
#include<vector>
using namespace std;
int n,m;//节点个数和线路 
int sum =0;//总路径条数 
//int l[5];//用于打出路径 
struct jiedian{//每个节点 
	bool isup=false;//是否已经用过 
	bool ist=false;//是否是头节点 
	vector<int> down;//下面连接了哪些节点,用于后面遍历 
}; 
struct jiedian jd[10005];
void dfs(int d,int step){
	if(step==4&&jd[d].ist){//如果最后一步并且最后一个节点是头结点,形成一个闭环 
		//l[4] = d;//储存路径 
		sum++;
//		for(int k=1;k<=3;k++){//输出一条完整的路径 
//			cout<<l[k]<<"->";
//		}
//		cout<<l[4]<<endl;
		return;//回溯 
	}
	if(!jd[d].isup){//如果节点未被使用 
		jd[d].isup = true;
		//l[step] = d;//存储节点路径 
		if(step==4){//如果到最后一步 
//			for(int k=1;k<=3;k++){
//				cout<<l[k]<<"->";
//			}
//			cout<<l[4]<<endl;
			sum++;
			jd[d].isup = false;//将节点重置为未被使用状态 
			return;//回溯 
		}
		for(int i=0;i<jd[d].down.size();i++){//遍历当前节点下所有连接节点 
			dfs(jd[d].down[i],step+1); 
		}
		jd[d].isup = false;//重置当前节点状态 
	}
	return;//回溯 
}

int main(){
	cin>>n>>m;
	int a,b;
	for(int i=0;i<m;i++){
		cin>>a>>b;
		jd[a].down.push_back(b);
		jd[b].down.push_back(a);
	}
	for(int i=1;i<=n;i++){
		int step = 1;
		jd[i].ist = true;//确定头节点 
		dfs(i,step);
		jd[i].ist = false;//头节点重置 
	}
	cout<<sum;
	return 0;
}

有什么办法能解决最后一个的超时呢

2024/4/30 14:01
加载中...