zoukankan      html  css  js  c++  java
  • POJ 3311

    设dp状态为dp[i][j]为当前访问过的结点状态为i且当前停留点为j时的最短路径。用二进制存存储访问过的状态,访问过为1,否则为0。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    const int inf=(1<<30);
    int map[12][12];
    int dp[1<<11][12],n;
    
    struct Status{
    	int i,j,v;
    	Status(){}
    	Status(int ii,int jj,int vv){i=ii,j=jj,v=vv;}
    }que[(1<<11)*12];
    int head,tail;
    
    void slove(){
    	while(head<tail){
    		Status tmp=que[head++];
    		if(tmp.v>dp[tmp.i][tmp.j]) continue;
    		for(int j=0;j<=n;j++){
    			int st=(1<<j);
    			int tst=tmp.i|st;
    			if(dp[tst][j]>tmp.v+map[tmp.j][j]){
    				dp[tst][j]=tmp.v+map[tmp.j][j];
    				que[tail++]=Status(tst,j,dp[tst][j]);
    			}
    		}
    	}
    	printf("%d
    ",dp[(1<<n+1)-1][0]);
    }
    
    int main(){
    	while(scanf("%d",&n),n){
    		for(int i=0;i<=n;i++){
    			for(int j=0;j<=n;j++)
    			scanf("%d",&map[i][j]);
    		}
    		for(int i=0;i<(1<<(n+1));i++){
    			for(int j=0;j<=n;j++)
    			dp[i][j]=inf;
    		}
    		dp[1][0]=0;
    		head=tail=0;
    		que[tail++]=Status(1,0,0);
    		slove();
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    JDBC连接MySQL并且查询操作。
    struts
    KMP 剪花布条hdoj2087
    线段树---敌兵布阵hdoj 1166
    设计模式----观察者模式
    线段树--hdoj1754
    ZOJ 2283 Challenge of Wisdom
    SGU 134 Centroid
    UVA 1637 Double Patience
    HDU 4389 X mod f(x)
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4381934.html
Copyright © 2011-2022 走看看