ali5050
دوشنبه 19 تیر 1391, 21:20 عصر
سلام دوستان
من برنامه فروشنده دوره گرد به روش پویا رو دارم حالا وقتی اجراش می کنم چند تا ارور میده لطفا کمک کنید خیلی ممنون میشم اینم برنامش
#include<iostream.h>
#include<math.h>
#include<fstream.h>
#include<conio.h>
//using namespace std;
#define N 10
#define SETCOUNT 1500
int graph[N][N];
class set{
public:
int count;//count of member
long subset;
set(){count=0;subset=0;}
set(unsigned long parsubset){subset=parsubset; count=CountOfMember();}
int CountOfMember();
int IsInSubSet( int numofmember);
set Remove( int numofmember);
};
int set::CountOfMember(){
int ret=0;
long tpar=subset;
for(;tpar;tpar=tpar>>1){
if(tpar%2){ret++;}
}
return ret;
}
int set::IsInSubSet( int numofmember){
int ret=0;
unsigned long t=(unsigned long)pow(2.0,numofmember);
if(t&subset){ret=1;}
return ret;
}
set set::Remove( int numofmember){
set ret(subset);
long t=(unsigned long)pow(2.0,numofmember);
t=~t;
ret.subset=t⊂
return ret;
}
void travel(int W[N][N],int P[N][SETCOUNT],int numberofnode,int &minlength){
set V((int)pow(2.0, numberofnode)-1);
int i,j,k;
int D[N][SETCOUNT];//(int)pow(2.0,N-1)
for(int i=1;i<numberofnode;i++){
D[i][0]=W[i][0];
}
for(k=1;k<=numberofnode-2;k++){
for(int l=0;l<V.subset/2;l++){
set lset(l);//in lset v2 is in index 0
if(lset.count==k){
for(i=1;i<numberofnode;i++){
if(lset.IsInSubSet(i-1)){continue;}
int min=32530,tj=0;
for(j=1;j<numberofnode;j++){
if(!lset.IsInSubSet(j-1)){continue;}
int tdistance=W[i][j]+D[j][lset.Remove(j-1).subset<<1];
if(tdistance<min){min=tdistance;tj=j;}
}
int indexsub=lset.Remove(j-1).subset<<1;
D[i][indexsub]=min;
P[i][indexsub]=tj;
}
}
}
}
int min=32530,tj=0;
for(j=1;j<numberofnode;j++){
int tdistance=W[0][j]+D[j][V.Remove(0).Remove(j).subset];
if(tdistance<min){min=tdistance;tj=j;}
}
D[0][V.Remove(0).subset]=min;
P[0][V.Remove(0).subset]=tj;
minlength=D[0][V.Remove(0).subset];
}
#define N 10
void ShowMatris(int matris[N][N],int n){
for(int i=0;i<n;i++){
cout<<"\n";
for(int j=0;j<n;j++){
cout<<matris[i][j]<<" ";
}
}
cout<<"\n";
}
void main(){
int len=0;
//cout<<"enter len of graph:";
//cin>>len;
len=4;
ifstream ifile;
ifile.open("graph.txt");
ifile>>len;
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
ifile>>graph[i][j];
}
}
ShowMatris(graph,len);
cout<<endl;
int minlength=0;
int P[N][SETCOUNT];
travel(graph,P,len,minlength);
cout<<"min length :"<<minlength<<endl;
set tset((int)pow(2.0, len)-1);
int i=0;
cout<<"v1 ";
for(;tset.count>2;){
tset=tset.Remove(i);
cout<<"v"<<(P[i][tset.subset]+1)<<" ";
i=P[i][tset.subset];
}
cout<<"v1 ";
getch();
}
من برنامه فروشنده دوره گرد به روش پویا رو دارم حالا وقتی اجراش می کنم چند تا ارور میده لطفا کمک کنید خیلی ممنون میشم اینم برنامش
#include<iostream.h>
#include<math.h>
#include<fstream.h>
#include<conio.h>
//using namespace std;
#define N 10
#define SETCOUNT 1500
int graph[N][N];
class set{
public:
int count;//count of member
long subset;
set(){count=0;subset=0;}
set(unsigned long parsubset){subset=parsubset; count=CountOfMember();}
int CountOfMember();
int IsInSubSet( int numofmember);
set Remove( int numofmember);
};
int set::CountOfMember(){
int ret=0;
long tpar=subset;
for(;tpar;tpar=tpar>>1){
if(tpar%2){ret++;}
}
return ret;
}
int set::IsInSubSet( int numofmember){
int ret=0;
unsigned long t=(unsigned long)pow(2.0,numofmember);
if(t&subset){ret=1;}
return ret;
}
set set::Remove( int numofmember){
set ret(subset);
long t=(unsigned long)pow(2.0,numofmember);
t=~t;
ret.subset=t⊂
return ret;
}
void travel(int W[N][N],int P[N][SETCOUNT],int numberofnode,int &minlength){
set V((int)pow(2.0, numberofnode)-1);
int i,j,k;
int D[N][SETCOUNT];//(int)pow(2.0,N-1)
for(int i=1;i<numberofnode;i++){
D[i][0]=W[i][0];
}
for(k=1;k<=numberofnode-2;k++){
for(int l=0;l<V.subset/2;l++){
set lset(l);//in lset v2 is in index 0
if(lset.count==k){
for(i=1;i<numberofnode;i++){
if(lset.IsInSubSet(i-1)){continue;}
int min=32530,tj=0;
for(j=1;j<numberofnode;j++){
if(!lset.IsInSubSet(j-1)){continue;}
int tdistance=W[i][j]+D[j][lset.Remove(j-1).subset<<1];
if(tdistance<min){min=tdistance;tj=j;}
}
int indexsub=lset.Remove(j-1).subset<<1;
D[i][indexsub]=min;
P[i][indexsub]=tj;
}
}
}
}
int min=32530,tj=0;
for(j=1;j<numberofnode;j++){
int tdistance=W[0][j]+D[j][V.Remove(0).Remove(j).subset];
if(tdistance<min){min=tdistance;tj=j;}
}
D[0][V.Remove(0).subset]=min;
P[0][V.Remove(0).subset]=tj;
minlength=D[0][V.Remove(0).subset];
}
#define N 10
void ShowMatris(int matris[N][N],int n){
for(int i=0;i<n;i++){
cout<<"\n";
for(int j=0;j<n;j++){
cout<<matris[i][j]<<" ";
}
}
cout<<"\n";
}
void main(){
int len=0;
//cout<<"enter len of graph:";
//cin>>len;
len=4;
ifstream ifile;
ifile.open("graph.txt");
ifile>>len;
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
ifile>>graph[i][j];
}
}
ShowMatris(graph,len);
cout<<endl;
int minlength=0;
int P[N][SETCOUNT];
travel(graph,P,len,minlength);
cout<<"min length :"<<minlength<<endl;
set tset((int)pow(2.0, len)-1);
int i=0;
cout<<"v1 ";
for(;tset.count>2;){
tset=tset.Remove(i);
cout<<"v"<<(P[i][tset.subset]+1)<<" ";
i=P[i][tset.subset];
}
cout<<"v1 ";
getch();
}