aasde

来源:互联网 发布:兼职网络海报设计 编辑:程序博客网 时间:2024/06/04 17:43
#include<iostream>using namespace std;#define NUM 100int n;int m;int a[NUM][NUM];int x[NUM];int bestx[NUM];int cc;int bestc;int NoEdge=-1;void BackTrack(int t){    int i;    if(t==n)    {        if(a[x[n-1]][x[n]]!=NoEdge&&a[x[n]][1]!=NoEdge&&            (cc+a[x[n-1]][x[n]]+a[x[n]][1]<bestc||bestc==NoEdge))        {            for(i=1;i<=n;i++)                bestx[i]=x[i];            bestc=cc+a[x[n-1]][x[n]]+a[x[n]][1];        }        return ;    }    else    {        for(i=t;i<=n;i++)        {            if(a[x[t-1]][x[i]]!=NoEdge&&(cc+a[x[t-1]][x[i]]<bestc||bestc==NoEdge))            {                swap(x[t],x[i]);                cc+=a[x[t-1]][x[t]];                BackTrack(t+1);                cc-=a[x[t-1]][x[t]];                swap(x[t],x[i]);            }        }    }}int main(){    while(cin>>n&&n)    {        cin>>m;        int i,j,length;        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)                a[i][j]=NoEdge;        for(int k=1;k<=m;k++)        {            cin>>i>>j>>length;            a[i][j]=a[j][i]=length;        }        for(i=1;i<=n;i++)            x[i]=i;        bestc=NoEdge;        BackTrack(2);        for(i=1;i<=n;i++)            cout<<bestx[i]<<' ';        cout<<endl;        cout<<bestc<<endl;    }    return 0;} 
0 0