题解:UVA10503 The dominoes solitaire

· · 题解

题目大意

思路

代码

#include<bits/stdc++.h>
using namespace std;
struct node{
    int x,y;
};
node f,e,a[15]; 
bool vl[15],f2;
int n,m;
void dfs(int x1,int sum) {
    if(f2){//找到了答案,返回 
        return;
    }
    if(sum==n) {//有没有达到数量 
        if(x1==e.x){//能不能和另一端的骨牌链接 
            f2=1;//搜到答案了
        } 
        return;
    }
    for(int i=0; i<m; i++) {
        if(vl[i]){//这个骨牌是否被用过
            continue;
        } 
        if(a[i].x==x1) {
            vl[i]=1;
            dfs(a[i].y,sum+1);
            vl[i]=0;
        }
        if(a[i].x==a[i].y){
            continue;//两个数相同搜一遍就行
        } 
        if(a[i].y==x1) {
            vl[i]=1;
            dfs(a[i].x,sum+1);
            vl[i]=0;
        }
    }
}
signed main() {
    while(cin>>n&&n) {//更方便的输入判断 
        cin>>m>>f.x>>f.y>>e.x>>e.y;
        memset(vl,0,sizeof vl);//记得初始化
        f2=0;
        for(int i=0; i<m; i++) {//输入 
            cin>>a[i].x>>a[i].y;
        }
        dfs(f.y,0);//调用 
        if(f2){
            cout<<"Yes"<<endl;//找到了答案 
        } 
        else{
            cout<<"No"<<endl;
        } 
    }
    return 0;
}