UVA 116 Unidirectional TSP

来源:互联网 发布:北京科技大学网络登录 编辑:程序博客网 时间:2024/06/08 05:32

记录路径。。


字典序最大。。


#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 1005#define inf 0x3f3f3f3fint Next[N][N];int maps[N][N];int dp[N][N];int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        memset(maps,0,sizeof(maps));        for(int i=1;i<=n;i++)        {            for(int j=1;j<=m;j++)            {                scanf("%d",&maps[i][j]);            }        }        memset(dp,0,sizeof(dp));        int res = inf;        int F_pos = 0;        for(int j=m;j>0;j--)        {            for(int i=1;i<=n;i++)            {               int pos[3] = {i-1,i,i+1};                if(pos[0]==0)pos[0]=n;                if(pos[2]==n+1)pos[2]=1;                dp[i][j]=inf;                sort(pos,pos+3);///字典序最小。                for(int  k=0;k<3;k++)                {                    int v=maps[i][j]+dp[pos[k]][j+1];                    if(dp[i][j]>v)                    {                        dp[i][j]=v;                        Next[i][j]=pos[k];                    }                }                if(j == 1 &&dp[i][j] < res){                    res = dp[i][j];                    F_pos = i;                }            }        }        for(int i=F_pos,j=1;j<=m;i=Next[i][j],j++){            if(j==1)            printf("%d",i);            else printf(" %d",i);        }        printf("\n%d\n",dp[F_pos][1]);    }}


原创粉丝点击