Dominoes-第一个回溯

    技术2022-05-19  30

    //回溯的应用,又是深搜,把符合条件的和不符合条件的都穷举出来,成树。#include<stdio.h>struct Node{ int e; int s; int sign;};int c,n,si;Node map[11];void dfs(int k)//k是元组末的尾(元素列的最后一个元素的)。{ int i; if(c==n&&k==map[0].s){  si=1;  return ;//符合条件的那一个 } else{  for(i=0;i<n;i++)   if(map[i].sign!=1){    if(map[i].s==k){     c++;     map[i].sign=1;     dfs(map[i].e);     c--;        //回溯时要还原计数及标志。     map[i].sign=0;    }    if(map[i].e==k){     c++;     map[i].sign=1;     dfs(map[i].s);     c--;     map[i].sign=0;    }

       } }}

    main(){ int i; int ca=0; while(ca++,scanf("%d",&n),n){  si=0;  c=1;  for(i=0;i<n;i++){   scanf("%d%d",&map[i].s,&map[i].e);   map[i].sign=0;  }  map[0].sign=1;  dfs(map[0].e);  if(si==1)printf("Set #%d: YES/n",ca);  else printf("Set #%d: NO/n",ca); } return 0;}


    最新回复(0)