⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第一次写的没有加入路径.c

📁 旅行商问题 某售货员要到若干城市去推销商品
💻 C
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAX 100000
#define INFINITY 100000

int d[21][MAX]={INFINITY};

int main(){
	int i,j,k,t,n;
	long min;
	int c[21][21]={0};
	char str[100];

	printf("Input the filename:\n");
	scanf("%s",str);
	if(freopen(str,"r",stdin)==NULL){
		printf("open file error\n");
		exit(1);
	};
 	scanf("%d",&n);

	for(i=0;i<n;i++)
		for(j=0;j<n;j++){
			scanf("%d",&c[i][j]);
			if(c[i][j]==0) c[i][j]=INFINITY;
		}
	
	for(i=1;i<n;i++){
		d[i][0]=c[i][0];
//		printf("%d ",d[i][0]);
		}

	t=1;
	for(i=1;i<=n-1;i++)
		t=t*2;
	t=t-1;
	
	for(i=1;i<=t;i++){

		for(j=1;j<n;j++){
			min=INFINITY;
			if(((i>>j-1)&1)==0){

				for(k=1;k<n;k++)
				if(((i>>(k-1))&1)!=0)
					if(c[j][k]+d[k][i-(1<<(k-1))]<min)
						min=d[k][i-(1<<(k-1))]+c[j][k];
				d[j][i]=min;
			//	printf("%d ",min);
			}//if((i&(1<<j)
//			printf("%d ",min);
			}//for j

		printf("\n");
	}//for i
//	printf("t is %d\n",t);
	
	min=INFINITY;
	for(i=1;i<n;i++)
		if(min>c[0][i]+d[i][t^(1<<(i-1))])
			min=c[0][i]+d[i][t^(1<<(i-1))];
		printf("%d\n",min);
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -