Firetruck(dfs)

来源:互联网 发布:如何面试java架构师 编辑:程序博客网 时间:2024/05/23 16:52

题目来源:1991 ACM Final,Problem A,Firetruck(UVa 208)

题意:给定目标街口,问从街口1到目标街口路径条数并打印出路径。(最多20个街口)


思路:本题是典型的路径搜索问题,搜索从位置1开始。依次将搜索到的街口编号放入路径path中。如果搜索到目标街口,那么本次搜索结束,并输出该路径,可达路径数增加1。如果没有到达目标街口,那么判断当前可到达的街口,是否出现在先前的那段路径中,若出现,则放弃,否则,加入路径。


代码:

int sum,aim;//路径条数,目标街口int path[22];//保存路径int street[22][22];//街道图,双向的void dfs(int pos,int path[],int index){           if(pos==aim)           {                      sum++;                      for(int i=0;i<index;i++)                                    cout<<path[i];                      cout<<endl;            }            for(int i=1;i<22;i++)            {                       if(street[pos][i])                       {                                   int j;                                   for(j=0;j<index;j++)//查看街口是否已经在路径path上出现过                                                 if(path[j]==i)     break;//如果出现过,放弃                                   if(j==index)                                   {                                                 path[index]=i;                                                 dfs(i,path,index+1);                                   }                        }             }}int main(){             /*输入略*/             memset(street,0,sizeof(street));             street[u][v]=street[v][u]=1;             path[0]=1;             sum=0;             dfs(1,path,1);             /*...*/             return 0;}

原创粉丝点击