الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة ال two optimal solution

مغلق
بدأه miss_internet في 23 نوفمبر 2005 · 5 رد · 530 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اخواني انا عندي مشكله في هذا الكود اللي هو عن ال two optimal solution في مشكلة البائع المتجول

وكل ما اسويله run يطلع لي errors

ياليت لو تساعدوني في حل هذي المشكله

وهذه هو الكود:

void tscase::opt(int p[c1] )
    {  int p1[c1],n,m;
	int p2[c1],d1,d2;

    for (int i=0;i<c1;i++)

  { cout<<p;

   p1=p;
   p2=p;

  }

   d1=total_dist(p1);

   cout<<d1;

    d2=total_dist(p2);

  m=  p2[[0]-1][[1]-1];
  n= p2[[2]-1][[3]-1] ;

    if (m > n)
       {
        n =  p2[[0]-1][[1]-1];

      p2[[0]-1][[1]-1] = p2[[2]-1][[3]-1];

        p2[[2][[3]-1] = n;


   cout<<p2;
       }


   if (d2<d1)

   {  p1=p2;

   cout<< " p1" <<p1;
     }

تم تعديل هذه المشاركة بواسطة miss_internet في 23 نوفمبر 2005 في 21:48

#2

كيف تريد إكتشاف الخطأ وأنت واضع جزء من الكـود... حسب رؤويتي الاولية لهذا الكـود .. فأين قوس الإغلاق للدالة

#3

انا يطلع لي الخطا في هذا الجزء بس من البرنامج

#4

وينكم؟

بليييييييز احد منكم يساعدني

انا الاخطاء اللي عندي في هذي الداله بس مب عارفه كيف اصلحها

وهذا البرنامج كامل معاه داله الـ two optimal اللي انا ضفتها عليه

بلييييييز ساعدوني

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>

const int c1 = 10;

const int c3 = c1*(c1-1)/2;

int dist[c1][c1] ;

int clist[c1];
int index[c1];
int path[c1];
int open_ar[c1] ;
int opt_dist, min_dist;

inline int round (const float a) {return (int) (a + 0.5);}
inline void remove_node(int node){ open_ar[node-1] = 0;}
void bubble_sort(int a[], int n) ;
void set_clist(int tnode,int tclist[c1])   ;
int next_node(int list[c1])  ;
void set_index(int list[c1], int index[c1], int node);
void disp_path1 (int list[c1]);
float avg (int [c1][c1]);
float std_dev (int [c1][c1], float );

class tscase
 { private:
     int cities;
     float avg;
     float std;
     float avg_diff;
     int dist_ltn_avg;
     int max_diff ;
     int nn   ;
     int path_nn[c1];
     int bf   ;
     int path_bf[c1];
     int cdist[c1][c1];
     int x1[c1];
     int y1[c1];
  public:
     void readdata();
     void readdist(int list[c1][c1]);
     void writedata();
     void disp_case();
     void copy_path_nn(int a[c1]);
     void disp_path_nn ();
     void write_nn (int a) { nn = a;}
     void write_avg (float a) { avg = a;}
     void write_std (float a) { std = a;}
     int total_dist(int [c1]);
      void opt(int a[c1] );

 };

 void tscase:: readdata()
 {  avg = 0;
    std = 0;
    cities = c1;
 }

 void tscase :: readdist(int list[c1][c1])
 {  int i, j;
    for (i = 0; i<c1; i++)
       for (j  = 0; j<c1; j++)
    list[j] = cdist[j];
 }

 void tscase :: copy_path_nn(int a[c1])
 { int i;
   for (i = 0; i < c1; i++)
       path_nn = a;
 }

 void tscase :: disp_path_nn ()
 { int i;
   for (i = 0; i < c1; i++)
      cout<< path_nn << " ";
    cout<< endl ;
 }


  void tscase:: writedata()
 {

 //   cout <<" number of cities " << cities << endl;
    cout <<" avg distance  " << avg << endl;
    cout <<" STD " << std << endl;
    cout <<" distance using NN  " << nn << endl;
    cout <<" path NN is  " ;

    disp_path_nn();
    cout << endl;
 }

 void tscase :: disp_case ()
 { int i,j;
   cout<< endl ;
   cout<< endl ;
   cout<< setw(4)<<1;
   for ( i = 1; i < c1; i++)
  cout<< setw(5) << i+1;
   cout<< endl ;
   for ( i = 0; i < c1; i++)
       {
  for (j = 0; j<c1; j++ )
      {
        cout<< setw(5)<<cdist[j] ;
      }
  cout << endl;
       }
 }



 int main(void)

{ clrscr();
  int i, j, s, t;
   int k, count;
   int node_ct ;
   int node ;
   float avg_dist , std_devn;
   tscase case1, case2;

   fstream outfile;
   outfile. open("tsmfp3.dat", ios::in | ios::out |ios::binary );
   fstream infile;
   infile. open("tsmf10.dat", ios::in | ios::out |ios::binary );



   for (i=0; i < 1; i++)
     { infile.read((char*) & case2, sizeof(tscase));
       case2.readdist(dist);
    //   case2.writedata();
     //  case2.disp_case();
       cout<< i+1 <<"    ";
       avg_dist = avg(dist);
       std_devn = std_dev (dist, avg_dist);
       case2.write_avg (avg_dist);
       case2.write_std (std_devn);



       min_dist = 9999;
       for (s=0; s< 1; s++)

  { for (j=0; j< c1; j++)
       open_ar[j] = j+1;
    opt_dist = 0;
    node_ct = 0;
    node = s+1;
    int fnode = node;
    path[node_ct] = node;
    node_ct++;
    remove_node(node);

    for(j=1; j<c1; j++)
      { set_clist(node, clist);
        bubble_sort(clist, c1);
        set_index(clist, index, node);
        node = next_node(clist);
        path[node_ct] = node;
        node_ct++;
        remove_node(node);
      }

    opt_dist += dist[node-1][fnode-1];
 //    cout << "optimum distance = " << opt_dist << endl;
 //    cout << "optimum path is  " ;
 //    disp_path1(path);

    if (min_dist> opt_dist)
       { min_dist = opt_dist;
  case2.write_nn(opt_dist);
  case2.copy_path_nn(path);
       }
  }




       outfile.write((char*) & case2, sizeof(tscase));
       case2.writedata();
       case2.disp_case();
       case2.total_dist(path);
       case2.opt(path);
       cout<<endl;
    }

  outfile. close();
  infile. close();
  getch();

  return 0;
}

void bubble_sort(int a[], int n)
   {   int k, i, j;
      for(j=0; j<n-1; j++)
	for(i=j+1; i<n; i++)
  if (a[j] > a)
  { k = a[j];
    a[j] = a;
    a = k;
  }
  //   cout << endl;
    }

  void set_clist(int tnode, int tclist[c1])
  {  int i;
     for(i= 0; i<c1; i++)
	tclist = dist[tnode-1];
  /*   cout <<"new list is ";
     for(i= 0; i<c1; i++)
	cout << clist << " ";
     cout << endl; */

  }
  int next_node(int list[c1])
  { int i, k;
    for(i= 0; i<c1; i++)
    {  if (list != 0)
  {  k = index;
     if (open_ar[k-1] != 0)
  break;
  }
    }
 //   cout << "next node is " << index << endl;
 //   cout << "distance is " << list<< endl;
    opt_dist += list;
    return index;
  }

 void set_index(int list[c1], int index[c1],int node)
 { int i, j;
   int flag[c1];
   for(i= 0; i<c1; i++)
      flag = 0;
   for(i= 0; i<c1; i++)
   {  for(j= 0; j<c1; j++)
  if (list == dist[node-1][j])
      if (flag[j] == 0 )
     { index = j+1;
       flag[j] = 1;
       break;
     }
   }
 }

 void disp_path1 (int list[c1])
 { int i;
   for (i = 0; i < c1; i++)
      cout<< list << " ";
    cout<< endl ;
 }

 float avg (int list[c1][c1])
 {  int i, j;
    float avg;
    long int tdist = 0 , count= 0;

    for ( i = 0; i < c1-1; i++)
	for (j = i+1; j<c1; j++ )
     { tdist += list[j];
       count++;
     }
    cout <<  endl;
//    cout << "  sum of distances =  " << tdist;
//    cout << "      "<< "count =  " << count << endl;
    avg = float(tdist)/count;
//    cout<< "average distance  "<< setiosflags(ios::showpoint)
//          << setprecision(2) << avg;
//    cout<< endl ;
    return avg;
 }

 float std_dev (int list[c1][c1], float avg)
 {  int i,j;
    float std, dif,  sum_sq = 0;
    int tdist = 0 , count= 0;

    for ( i = 0; i < c1; i++)
	for (j = i+1; j<c1; j++ )
     { dif = abs(list[j] - avg);
       sum_sq += dif * dif;
       count++;
     }
    std = sqrt(sum_sq/count);
   /* cout<<"standard deviation = "<< setiosflags(ios::showpoint)
	<< setprecision(2) << std;
    cout<< endl ; */
    return std;
 }

/////////////////////////////total distance
    int tscase::total_dist(int a[c1])
{
 int i, sum,s;
 sum=0;

 for(i=0;i<c1-1;i++)

	sum+=cdist[a-1][a[i+1]-1];


  s=a[c1-1]-1;
  sum=sum+cdist[0];
  cout<<endl;

   cout<< "total distance=   "<<sum;
      return sum;
  }
 /////////////////////////////////////////

هذي هي الداله

    void tscase::opt(int p[c1] )
    {  int p1[c1],n,m;
	int p2[c1],d1,d2;

    for (int i=0;i<c1;i++)

  { cout<<p;

   p1=p;
   p2=p;

  }

   d1=total_dist(p1);

   cout<<d1;

    d2=total_dist(p2);

  m=  p2[[0]-1][[1]-1];
  n= p2[[2]-1][[3]-1] ;

    if (m > n)
       {
        n =  p2[[0]-1][[1]-1];

      p2[[0]-1][[1]-1] = p2[[2]-1][[3]-1];

        p2[[2][[3]-1] = n;


   cout<<p2;
       }


   if (d2<d1)

   {  p1=p2;

   cout<< " p1" <<p1;
     }


}
}
#5

هل تستطيع تفسير هذا الكلام لي .. لأني صراحـة لا أفهـم..

m=  p2[[0]-1][[1]-1];
 n= p2[[2]-1][[3]-1];

كلام موجود في الدالة التي تقول أن فيها أخطاء ... وهـو كلام غريب أجهله ولأول مرة يمر علي .. فهل بإمكانك أن تقول ما هـو .. أو ما تريد بالضبط من هذه العمليات الغريبة

#6

وعندك أخطاء ambigous operators need praenthesses بمعنى ف ذلك السطر

 cout<< setw(5) << i+1;

يكتب

 cout<< setw(5) << (i+1);

وأيضا الاخطاء السابق اللى وضعة الاخ سلطان:)

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

هذا الموضوع مغلق.

مواضيع مشابهة