题解:UVA10503 The dominoes solitaire
题目大意
给你
思路
暴力搜索需要从头到尾扫一遍,很明显超时了,所以要加上优化。要注意的是两端的骨牌是不可以翻转的,但是中间的那
代码实现
#include<bits/stdc++.h>
using namespace std;
int n,m;
bool as[100005],ans_whike;
struct s__w{
int number_x;
int number_y;
}f,smd,a[100005];
void dfs(int number_x1,int ans){
if(ans_whike){
return;
}
if(ans==n){
ans_whike=(number_x1==smd.number_x?1:0);
return;
}
for(int i=1;i<=m;i++){
if(!as[i]){
if(a[i].number_x==number_x1){
as[i]=true;
dfs(a[i].number_y,ans+1);
as[i]=false;
}
if(a[i].number_x!=a[i].number_y){
if(a[i].number_y==number_x1){
as[i]=true;
dfs(a[i].number_x,ans+1);
as[i]=false;
}
}
}
}
}
int main(){
memset(as,0,sizeof(as));
ans_whike=false;
while(cin>>n){
memset(as,0,sizeof(as));
ans_whike=false;
if(n<=0){
return 0;
}
cin>>m>>f.number_x>>f.number_y>>smd.number_x>>smd.number_y;
for(int i=1;i<=m;i++){
cin>>a[i].number_x>>a[i].number_y;
}
dfs(f.number_y,0);
cout<<(ans_whike?"YES":"NO")<<endl;
}
return 0;
}