ñêà÷àòü ðåôåðàòû
  RSS    

Ìåíþ

Áûñòðûé ïîèñê

ñêà÷àòü ðåôåðàòû

ñêà÷àòü ðåôåðàòûÐåôåðàò: Òðàíñïîðòíàÿ çàäà÷à

                  int u;

                  int zn;

                  struct poten *next;

                  int b;

                  } *topnast = NULL,

                    *top = NULL,

                    *top1 = NULL;

                  int i,j;

                  int fl;

        //********** ÂÛÄÅËÅÍÈÅ ÏÀÌßÒÈ *******************8

        if((pu=(int*)calloc(m,sizeof(int)))==NULL)   abort();

        if((pv=(int*)calloc(n,sizeof(int)))==NULL)   abort();

      // ÏÐÈÑÂÎÅÍÈÅ ÂÑÅÌ ÏÎÒÅÍÖÈÀËÀÌ ÇÍÀ×ÅÍÈß MIN

        for(i=0;i<m;i++)

             *(pu+i) = MIN;

        for(j=0;j<n;j++)

             *(pv+j) = MIN;

       // Âûäåëåíèå ïàìÿòè ïîä ñòðóêòóðó è çàïîëíåíèå å¸ çíà÷åíèÿìè

        for(i=0;i<m;i++)

             {

             for(j=0;j<n;j++)

                  {

                  if((*(matr+i*n+j) > 0) || (*(matr+i*n+j)==-2))

                        {

                        if((top=(struct poten*)malloc(sizeof(struct poten)))==NULL)

                           abort();

                        fprintf(fil,"top = %d",top);

                        if(!topnast){

                           topnast = top;

                           fprintf(fil,"topnast = top = %d",top);

                   }

                           else top1 -> next=top;

                               top1=top;

                               top -> next=NULL;

                               top -> b = *(st+i*n+j);  //Ñòîèìîñòè

                               top -> v = j;

                               top -> u = i;

                               top -> zn = -1;

                               }

                        }

                   }

               *pu = 0;

               i=0; j = -1;

               for(top = topnast;top!=NULL;top = top -> next)

                    {

                        if((top -> u) == i && (top -> v)!=j)

                           {

                               *(pv+(top -> v)) = (top -> b) - *(pu+i);

                               j = (top->v);

                               top -> zn = 0;

                           }

                           else{

                           for(top1 = topnast;top1 != NULL;top1 = top1->next)

                               {

                                if((top1->v) == j && (top1->u)!=i)

                                    {

                                     *(pu+(top1->u))=(top1->b) - *(pv+j);

                                     i = (top1->u);

                                     top1 ->zn = 0;

                                     break;

                                    }

                                }

                               }

                           }

  // **********  Ïðîäîëæåíèå ôóíêöèè ïîäñ÷åòà ïîòåíöèàëîâ *****************

      for(;;){

               fl = 0;

               for(top = topnast;top!=NULL;top =top -> next)

                   {

                   if((top -> zn) == -1)

                     {

                     if(*(pu+(top ->u)) !=MIN)

                          {

                          *(pv+(top->v))=(top->b) - *(pu+(top ->u));

                          fl = 1;

                          top -> zn = 0;

                          }

                     if(*(pv+(top->v)) !=MIN)

                          {

                          *(pu+(top->u))=(top->b) - *(pv+(top->v));

                          fl=1;

                          top->zn = 0;

                          }

                     }

                  }

                  if(!fl) break;

                  }

                  printf("\n ÏÎÒÅÍÖÈÀËÛ ÏÎ v:");

                  fprintf(fil,"\n **** ÏÎÒÅÍÖÈÀËÛ ÏÎ v:");

                  for(i = 0;i<n;i++)

                  {

                  printf("%d",*(pv+i));

                  fprintf(fil,"%5d",*(pv+i));

                  }

                  getch();

                  printf("\n ÏÎÒÅÍÖÈÀËÛ ÏÎ u: ");

                  fprintf(fil,"\n **** ÏÎÒÅÍÖÈÀËÛ ÏÎ u: ");

                  for(i=0;i<m;i++)

                     {

                     printf("%d",*(pu+i));

                     fprintf(fil,"%5d",*(pu+i));

                     }

                     fprintf(fil,"\n");

                     for(top = topnast;top!=NULL;top = top->next)

                          free(top);

                          return;

                          } // potenzial

      // ****** PROVERKA PLANA NA OPTIMALNOST' ************************

                         void abcikl(int ik,int jk);

                         int cikl(int ik,int jk);

                         void pr(char pr[],void *st);  // Ïðåäâàðèòåëüíî

                         int prpoisk(int i1,int j1);   // Îáúÿâëåíû

                         int levpoisk(int i1,int j1);  //ÝÒÈ

                         int verpoisk(int i1,int j1);  //Ôóíêöèè

                         int nizpoisk(int i1,int j1);

  int optim(void)

            {

            int i,j;

            for(i=0;i<m;i++)

               {

               for(j=0;j<n;j++)

                   {

      // ÈÙÅÌ ÎÏÒÈÌÀËÜÍÎÅ ÐÅØÅÍÈÅ Â ÍÀØÅÉ ÌÀÒÐÈÖÅ È ÅÑËÈ ÅÃÎ ÍÅ ÍÀÉÄÅÌ

      // ÒÎ ÏÎ ÑËÅÄÓÞÙÅÌÓ ÓÑËÎÂÈÞ ÏÐÈÑÂÎÈÌ ÃÐÀÔÎÊËÅÒÊÅ Ñ ÊÎÎÐÄÈÍÀÒÀÌÈ

      // ik,jk ÇÍÀ×ÅÍÈÅ -1

                   if(( *(pu+i)+ *(pv+j))>(*(st+i*n+j))&&((*(matr+i*n+j)) == 0))

                         {

                         abcikl(i,j);

                         fprintf(fil,"optim(): Ïëàí íå îïòèìàëåí, ôóíêöèè main() âîçâðàùàåì -1,\n à abcikl() ïàðàìåòðû i,j ");

                         return(-1);

                         }

                   }

               }

             fprintf(fil,"Plan optimalen");

             return(0);

        } // ******* optim() ***************

  // ************** UPGRADE PLAN **************************

   void abcikl(int ik,int jk)

        {

        int i,j;

        fprintf(fil,"Ìû â abcikl()");

        if((matr2=(int*)calloc(n*m,sizeof(int))) == NULL)    abort();

        for(i=0;i<m;i++)

            {

            for(j=0;j<n;j++)

              {

              *(matr2+i*n+j) = *(matr+i*n+j); // Ñîçäàåì êîïèþ ðàáî÷åé ìàòðèöû

              }

            }

            *(matr2+ik*n+jk) = -1;

 // çíà÷åíèþ ìàòðèöû ñ ïàðàìåòðàìè ik,jk ïðèñâàåâàåì -1

            printf("\n");

            printf("Ïîèñê Öåïè: \n\n");

            fprintf(fil,"Ïîèñê Öåïè: \n\n");

            for(i=0;i<m;i++)

               {

               for(j=0;j<n;j++)

                    {

                    fprintf(fil,"%5d",*(matr2+i*n+j));

                    printf("%5d",*(matr2+i*n+j));

                    }

                    fprintf(fil,"\n");

                    printf("\n");

               }

                   fprintf(fil,"\n\n Ïåðåõîäèì â Ñðàíóþ, Ìàòü å¸, Ôóíêöèþ cikl(ik,jk) \n");

               getch();

               cikl(ik,jk);

               return;

               } //  abcikl

// ********* FUNKCION POISKA CIKLA **************************

      int cikl(int ik,int jk)

            {

            int nst,nstr,i,j,

                  perlev = 0,

                  perpr = 0;

            int perver = 0,

                  perniz = 0,

                  fl = 0,

                  fl3 = 1;

            int napr;

            struct cik { int prnapr;

                               int ick;

                               int jck;

                               struct cik *next;

                           } *topnast1 = NULL,

                               *top2 = NULL,

                               *top3 = NULL;

                         ch = 0;

                  if((top2 = (struct cik*)malloc(sizeof(struct cik))) == NULL)

                     abort();

                  if(!topnast1)

                     {

                     topnast1=top2;

                     top3=top2;

                     top3->ick=ik;

                     top3->jck=jk;

                     }

                  else

                    top3->next=top2;

                    top3=top2;

                    top2->next=NULL;

                    top2->ick = ik;

                    top2->jck = jk;

                    ch++;

                    fprintf(fil,"\n\nÄî Óñëîâèÿ while fl3 =%d \n",fl3);

                    pr("top2",top2);

                    fprintf(fil,"Âåñü öèêë ïîèñêà ñåé÷àñ íà÷íåòñÿ, íàäåþñü - \n ÷òî îí áóäåò íå áåñêîíå÷íûé èëè íå áåñïîëåçíûé :( \n");

                    printf("Âåñü öèêë ïîèñêà ñåé÷àñ íà÷íåòñÿ, íàäåþñü - \n ÷òî îí áóäåò íå áåñêîíå÷íûé èëè íå áåñïîëåçíûé :( \n");

                    printf("\n \t \t\tpress anykey to contunio\n");

                    getch();

                    while(fl3)

                        {

                        fl3=0;

                        fl = 0;

                        if((nst = prpoisk(ik,jk))>=0)

                           {

                           fprintf(fil,"\n\nÂíèìàíèå!!!\n nst = %d \n",nst);

                           fprintf(fil,"Ùà áóäåò ïîèê èäòè åìó áû...:Point found!\n");

                           printf("È îí ïîøåë RIGHT:Point found !\n\r");

                           napr = 2;

                           jk = nst;

                           top2->prnapr = 1;

                           }

                     else if((nstr = nizpoisk(ik,jk))>=0)

                           {

                           fprintf(fil,"DOWN: Point found !\n");

                           printf("DOWN: Point found !\n\r");

                           napr = 3;

                           ik = nstr;

                           top2->prnapr = 2;

                           }

                           else if((nst=levpoisk(ik,jk))>=0)

                                {

                                fprintf(fil,"LEFT:Point found !\n");

                                printf("LEFT:Point found !\n\r");

                                napr = 4;

                                jk = nst;

                                top2->prnapr = 3;

                                }

      // **************** Prodolzhenie 1 poiska ***********************

             else if((nstr = verpoisk(ik,jk))>=0)

                  {

                  fprintf(fil,"UP:Point found !\n");

                  printf("UP:Point found !\n\r");

                  napr = 1;

                  ik = nstr;

                  top2->prnapr = 4;

                  }

                  else

                    return(-1);

             while(!fl || *(matr2+ik*n+jk)!=-1)

                   {

                   fl=1;

                   switch(napr)

                          {

                          case 1:

                               printf("Search to the right --->");

                               fprintf(fil,"Search to the right --->");

                               if((nst = prpoisk(ik,jk))>=0)

                                    {

                                    printf("founded\n\r");

                                    fprintf(fil,"founded\n");

                                    if((top2=(struct cik*)malloc(sizeof(struct cik)))==NULL)

                                       abort();

                                    if(!topnast1) topnast1=top2;

                                    else top3 -> next=top2;

                                           top3 = top2;

                                           top2 -> next = NULL;

                                           top2->ick = ik;

                                           top2->jck = jk;

                                           ch++;

                                           top2->prnapr = 1;

                                           pr("top2",top2);

                                           napr = 2;

                                           jk = nst;

                                           perpr = perlev = 0;

                                           } // **** IF *******

                                    else

                                    {

                                    fprintf(fil,"Point not found ! Change direction to LEFT\n");

                                    napr = 3;

                                    perpr = 1;

                                    }

                           break;

      //***************** PRODOLZHENIE 2 POISKA ******************************

                   case 2:

                   printf("Search to the down --->");

                   fprintf(fil,"Search to the down --->");

                   if((nstr=nizpoisk(ik,jk))>=0)

                        {

                        if((top2=(struct cik*)malloc(sizeof(struct cik))) == NULL)

                           abort();

                           printf("founded\n\r"); fprintf(fil,"founded\n");

                           if(!topnast1) topnast1=top2;

                           else top3->next=top2;

                           top3=top2;

                           top2->next=NULL;

                           top2->ick = ik;

                           top2->jck = jk;

                           ch++;

                           top2->prnapr = 2;

                           pr("top2",top2);

                           napr = 3;

                           ik = nstr;

                           perniz=perver=0;

                           } //**** IF ********

                           else

                                {

                                fprintf(fil,"Point not found ! Change direction to UP\n");

                                 napr = 4;

                                 perniz = 1;

                                 }

                                 break;

                  case 3:

                         printf("Search to the left -->");

                         fprintf(fil,"Search to the left -->");

                                 if((nst=levpoisk(ik,jk))>=0)

                                      {

                                      if((top2=(struct cik*)malloc(sizeof(struct cik))) == NULL)

                                                abort();

                                                printf("founded\n\r"); fprintf(fil,"founded\n");

                                                if(!topnast1)

Ñòðàíèöû: 1, 2, 3


Íîâîñòè

Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

  ñêà÷àòü ðåôåðàòû              ñêà÷àòü ðåôåðàòû

Íîâîñòè

ñêà÷àòü ðåôåðàòû

© 2010.