HDU1572-下沙小面的(2)-最短路(深搜)

来源:互联网 发布:中国最新军装淘宝 编辑:程序博客网 时间:2024/06/05 13:54

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1572

好吧,没想到这题用深搜可以搞定。还以为又是一道套dijkstra算法的模板题。

#include<iostream>                                                                                                               #include<string>#include<cstdio>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<set>#include<vector>#include<algorithm>#define LL long long#define inf 1<<29#define s(a) scanf("%d",&a)#define CL(a,b) memset(a,b,sizeof(a))using namespace std;const int N=35;int n,m,a,b[N],c;string s1,s2;int Map[N][N];int dist,num,ans;bool vis[N];/*  深搜,搜索每一种可能的情况,标记,深一层,回溯。*/void dfs(int x,int step,int dist){    if(step==num)        if(ans>dist) ans=dist;    for(int i=1;i<n;i++)        if(b[i]){            b[i]=0;            dfs(i,step+1,dist+Map[x][i]);            b[i]=1;        }}int main(){    while(~scanf("%d",&n)){        if(n<=0) break;        CL(b,0);        for(int i=0;i<n;i++)            for(int j=0;j<n;j++)                s(Map[i][j]);        s(m);num=0;        for(int i=1;i<=m;i++){            s(a);            if(!b[a]){                b[a]=1;                num++;            }        }        ans=inf;        dfs(0,0,0);        printf("%d\n",ans);    }    return 0;}


 

0 0
原创粉丝点击