исправление алгоритма

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by raymax, 4 May 2011.

  1. raymax

    raymax New Member

    Joined:
    25 Apr 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    помогите пожалуйста найти ошибку. программа должна нахождить начальный опорный план транспортной задачи методом минимального элемента. но что то не получается, а в чем ошибка не пойму.
    Спасибо
    Code:
    #include "stdafx.h"
    
    using namespace System;
    #include<stdio.h>
    #include <conio.h>
    
    int main(array<System::String ^> ^args)
    {
      int m,n,i,j; 
      int *A= new int [m]; 
      int *B= new int [n];
      int** C;
      int s;
      int** matr;
    
      if( A==NULL){
    	Console::WriteLine("Не удалось выделить память!");
    	return 1;}
      if( B==NULL){
    	Console::WriteLine("Не удалось выделить память!");
    	return 1;}
      Console::WriteLine("Введите количество поставщиков (A)");
      scanf("%d",&m);
      Console::WriteLine("Введите запасы поставщиков");
      for(i=0;i<=m;i++){
    	  printf("A[%d]= ",i);
    	  scanf("%d", &A[i]);
      }
       Console::WriteLine("Введите количество потребителей (B)");
       scanf("%d",&n);
       Console::WriteLine("Введите заявки потребителей ");
       for(i=0;i<=n;i++){
    	   printf("B[%d]= ",i);
    	   scanf("%d", &B[i]);
       }
      
    	Console::WriteLine("Введите матрицу стоимости ");
    	 C = new int* [m];
    	for(i=0;i<=m;i++)
    		C[i]= new int [n];
    
    	for (i=0;i<=m;i++)
    		for(j=0;j<=n;j++){
    			printf("C[%d][%d]= ", i,j);
    			scanf("%d", &C[i][j]);
    		}
    		for (i=0;i<=m;i++)
    		for(j=0;j<=n;j++){
    			printf("C[%d][%d]= %d \n",i,j,C[i][j]);
    
    		}
    
    		matr= new int* [m];
    		for(i=0;i<=m;i++)
    		matr[i]= new int [n];
    		if( matr==NULL){
        	Console::WriteLine("Не удалось выделить память!");
    	  return 1;} 
    	 int r,k;
    	 int min;
    	 min= 1000;
      for(i=0;i<=m;i++)
    		   for(j=0;j<=n;j++){
        for(i=0;i<=m;i++)
    		   for(j=0; j<=n;j++){
    				if(C[i][j]< min)
    				{
    				min=C[i][j];
    				r=i;
    				k=j;
    				}
    		   }
    		 if (A[r]<B[k])
    		{
    			matr[r][k]=A[r];
    			B[k]=B[k]-A[r];
    			A[r]=0;
    			for(r=0;r<=m;r++){
    				C[r][j]=999;
    			}
    
    		}
    		if(B[k]>A[r])
    		{
         		matr[r][k]=B[k];
    			A[r]=B[k]-A[r];
    			B[k]=0;
    			for(k=0;k<=n;k++){
    				C[i][k]=999;
    			}
    		}
    			if(A[r]=B[k])
    			{
    				matr[r][k]=B[k];
    			A[r]=B[k]-A[r];
    			B[k]=0;
    			for(k=0;k<=n;k++){
    				C[i][k]=999;
    			}
    			}
    			}
    		   	
    		      	
    	 Console::WriteLine("Опорный план:  ");	
    		for (r=0;r<=m;r++)
    		for(k=0;k<=n;k++){
    			printf("matr[%d][%d]= %d \n",r,k,matr[r][k]);
    		}
    		
    	Console::WriteLine(" Значение целевой функции для этого опорного плана равно:  ");				
         printf("%d",s);
        _getch();
    }
    
     
    #1 raymax, 4 May 2011
    Last edited by a moderator: 4 May 2011