20分代码,蒟蒻在线悬关求调
查看原帖
20分代码,蒟蒻在线悬关求调
679459
tiny_cat楼主2023/8/9 19:53
#include<bits/stdc++.h>
using namespace std;
int n,m,s,t,p[10006][10006],x,y,ans=1e5+100,l=0;
bool check(int s,int last[10006],int k){
	last[s]=1;
	int o=0;
	if(s==t)l=1;
	for(int i=1;i<=n;i++){
  		if(p[s][i]==1&&last[i]==0&&i!=k&&last[i]==0&&i!=s){
			o++;
  			if(i==t) l=1;
		  	else last[i]=1,check(i,last,k),last[i]=0;
		}
	}
	if(!o||l) return 1;
	else return 0;
}
void dfs(int now,int num,int last[10006]){
	if(now==t){
		if(ans==-1){ans=num;return;}
		else {ans=min(ans,num);return;}
	}
	for(int i=1;i<=n;i++){
		if(p[now][i]==1&&last[i]==0&&check(now,last,i)&&i!=now){
			last[i]=1;
			dfs(i,num+1,last);
			last[i]=0;
		}
		l=0;
	}
	return;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		p[x][y]=1;
	}
	cin>>s>>t;
	int lasta[10006];
	lasta[s]=1;
	dfs(s,0,lasta);
	cout<<ans;
	return 0;
}

纯dfs写的,7个点MLE,1个点WA

2023/8/9 19:53
加载中...