91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .cpp
    金幣: 1
    下載: 1 次
    發布日期: 2021-06-19
  • 語言: C/C++
  • 標簽:

資源簡介

對基于動態規劃的TSP問題的求解 ,這個源碼很好的說明其中的求解過程,以及數據結構的設計問題

資源截圖

代碼片段和文件信息

#include
#include
#include

typedef?struct?tf*?cnode;

struct?tf{
?int?currentNode;//當前的節點
?int?set;???//當前的狀態集合用二進制表示
?int?pathLength;//當前的路徑值
?cnode?last;//記錄上一個節點以保存上一個的信息
?cnode?next;//記錄下一個節點
};

struct?tsp
{
int?count;//當前的城市的個數
cnode*?ltf;//記錄struct?tf數組
};


void?output1(int?*aint?n)
{
??int?i;
??for(i?=?0;i? ??printf(“%d??“a[i]);
??printf(“\n“);
}

void?output2(int?**aint?n)
{
int?ij;
for(i?=?0;i? {
for(j?=?0;j? {
??printf(“%d?“a[i][j]);
}
printf(“\n“);
}
}


//自定義的冪函數<用于之后的集合的表示>
int?mypow(int?xint?y)
{
return?(int)pow((double)x(double)y);
}

//判斷元素i是否在set集合中
int?inSet(int?setint?i)
{
if((set&mypow(2i-1))?>?0)
return?1;
else
return?0;
}

//將元素i插入集合set中
void?insertSet(int?&setint?i)
{
???int?p?=?mypow(2i-1);
???set?=?set|p;
}

//刪除set中的i
void?deleteSet(int?&setint?i)
{
set?=?~(mypow(2i-1))&set;
}

//讀權矩陣
int**?readWeight(int?&nchar*?filename)
{
?FILE?*fp;
?fp?=?fopen(filename“r“);
?if(fp?==?NULL)
?{
???printf(“文件%s打開時出錯\n“filename);
???exit(1);
?}

??int?ij**w;
??fscanf(fp“%d“&n);
??w?=?(int**)calloc(nsizeof(int*));
??for(i?=?0;i???{
????w[i]?=?(int*)calloc(nsizeof(int));
??}

??for(i?=?0;i???{
??for(j?=?0;j? ??{
????fscanf(fp“%d“&w[i][j]);
??}
??}
??fclose(fp);
??return?w;
}

//返回組合數C(nr)值
int?ZuHeShu(int?nint?r)
{
int?ick*a;
a?=?(int*)calloc(nsizeof(int));
for(i?=?0;i? {
a[i]?=?i+1;
}

c?=?0;
??do{
i?=?-1;
for(k?=?0;k? if(a[k]? i?=?k;
if(i?!=?-1)
{
??a[i]++;
??for(k?=?i+1;k? ???? a[k]?=?a[k-1]+1;

??????c++;
}
??}while(i?!=?-1);
??free(a);
??return?c+1;
}


//指定組合c(nr)中所有可能組合,返回其轉化后的01格式的int數組
int*?ZuHeArray(int?*a0int?nint?rint?sn)
{?
int?ick*set*a;
c?=?0;
set?=?(int*)calloc(snsizeof(int));
for(i?=?0;i? {
??set[i]?=?0;
}
????
a?=?(int*)calloc(nsizeof(int));
for(i?=?0;i? {
a[i]?=?i+1;
}

int?t;

for(i?=?0;i? {
???t?=?a[i]-1;
???insertSet(set[c]a0[t]);
}

??do{
i?=?-1;
for(k?=?0;k? if(a[k]? i?=?k;
????if(i?!=?-1)
{
?????a[i]++;
for(k?=?i+1;k? a[k]?=?a[k-1]+1;

????c++;
for(k?=?0;k? {
???t?=?a[k]-1;
???insertSet(set[c]a0[t]);
}
???}
}while(i?!=?-1);

??free(a);
??return?set;

}

//設置最后一個集合
int?setLastSet(int?n)
{
??int?iset;
??set?=?0;
??for(i?=?0;i???{
????set?=?set|mypow(2i);
??}
??return?set;
}

//獲得第row行的set中所有元素集合?,總元素的個數為n<非set集合中的元素個數>
int*?getSetNum(int?setint?rowint?n)
{
??int?ij*a;
??a?=?(int*)calloc(rowsizeof(int));
??j?=?0;

??for(i?=?1;i???{
????if(inSet(seti)?==?1)
{
a[j]?=?i;
j++;
}
if(j?==?row)
{
break;
}
??}
??return?a;
}

//將集合a轉為二進制的數
int?setNumSet(int?*aint?n)
{
?

評論

共有 條評論

相關資源