2013-05-14 92 views
0

我是一個試圖學習編程的學生,從來沒有做過任何複雜的編碼。最近我的講師給了我一個關於西北角的方法的任務。我跟着在互聯網上找到的代碼,但似乎有這個代碼的一些問題,我不明白,因爲我還是一個初學者。我做了一些閱讀,但我仍然無法弄清楚問題所在,並且很確定編碼存在許多問題。我非常感謝那些願意查看編碼的人。提前致謝。 :)如何編碼這個西北方法

#include "stdafx.h" 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    return 0; 
} 

using namespace std; 

#include <iostream> 
#include <fstream> 

const int row_max =4; 
const int col_max =4; 
int i,j; 

//create supply_array and require_array 
float supply_array[row_max]; 
float require_array[col_max]; 

//creating the cost matrix and unit matrix 
float cost_matrix[row_max][col_max]; 
float unit_matrix[row_max][col_max]; 

//initialize cost_matrix 

int main() 
{ 
    for(i=0 ; i<=row_max ; i++) 
    { 
     for(j=0 ; j<=col_max ; j++) 
     { 
      cin >> cost_matrix[i][j]; 
     } 
    } 

    //initialize unit_matrix 
    for(i=0 ; i<=row_max ; i++) 
    { 
     for(j=0 ; j<=col_max; j++) 
     { 
      unit_matrix[i][j]=0; 
     } 
    } 

    float cost_minimal= 0.0; 
    float *supply_ptr; 
    float *require_ptr; 
    supply_ptr = &supply_array[4]; 
    require_ptr = &require_array[4]; 

    //initialize supply_array 
    for(i=0 ; i<=row_max ; i++) 
    { 
     cin >> supply_array[i]; 
    } 

    //initialize require_array 
    for(i=0 ; i<=col_max; i++) 
    { 
     cin>>require_array[i]; 
    } 

    float *matrix_ptr; 
    matrix_ptr = &cost_matrix[0][0]; 
    int r=0,c=0,x=0,y=0; 
    while((x<= row_max) &&(y=col_max)) 
    { 
     if(*require_ptr>*supply_ptr) 
     { 
      unit_matrix[x][y]=supply_array[x]; 
      require_array[y]=require_array[y]-unit_matrix[x][y]; 
      supply_array[x]=supply_array[x]-unit_matrix[x][y]; 
      cost_minimal=cost_minimal+unit_matrix[x][y]; 
      x=x+1; 
      supply_ptr=supply_ptr+1; 
      matrix_ptr=matrix_ptr+col_max; 

      continue; 
     } 

     if(*require_ptr<*supply_ptr) 
     { 
      unit_matrix[x][y]=require_array[y]; 
      require_array[y]=require_array[y]-unit_matrix[x][y]; 
      supply_array[x]=supply_array[x]-unit_matrix[x][y]*cost_matrix[x][y]; 
      y=y+1; 
      x=x+1; 
      require_ptr=require_ptr+1; 
      supply_ptr=supply_ptr+1; 
      matrix_ptr=matrix_ptr+col_max; 

      continue; 
     } 
    } 

    //displaying the unit matrix 
    for(i=0;i<=row_max;i++) 
    { 
     for(j=0;j<=col_max;j++) 
     { 
      cout<<unit_matrix[i][j]; 
     } 
    } 

    //displaying the minimal cost 
    cout<< "the minimal cost obtained is : "<<cost_minimal; 
    return 0; 
} 
+2

你知道什麼可能會更好嗎?讀一本書,瞭解你在做什麼,並從頭開始編碼。然後你會寫出一些好的代碼,你將知道如何調試自己,因爲你會知道它是什麼意思,而不是在互聯網上找到一些東西,並試圖找出它的含義。 – Colleen 2013-05-14 16:40:28

+1

那麼,這段代碼應該做什麼,有什麼問題? – 2013-05-14 16:41:16

+1

瞭解「縮進」 - 它會讓你的代碼更容易閱讀! – 2013-05-14 16:48:34

回答

1

一個代碼中的表觀的問題是,數組索引從0開始,並且自row_max結束於陣列的大小減1

for(i=0 ; i<=row_max ; i++) 
{   //^^should be < 
    for(j=0 ; j<=col_max ; j++) 
    {  //^^should be < 
     cin >> cost_matrix[i][j]; 
    } 
} 

col_max是4在這種情況下,指數在區間[0,3]中,您不能訪問cost_matrix[4][4]

同時,您可以使用main_tmain(取決於您正在創建哪種C++項目),不應該在同一個源文件中包含這兩個項目。

+0

目前我不能專注於閱讀這些東西,因爲噸其他作業,因爲我仍然是一名學生。但是,我會把它作爲一個建議,一定會做的閱讀和學習時我有time.thanks所有的建議.. :) – 2013-05-14 17:15:13

+0

@ Azimaabd.rahim不客氣。 – taocp 2013-05-14 17:17:10

+0

非常感謝taocp.i'll會嘗試在編碼中糾正這個問題。 :) – 2013-05-14 17:27:03

0

內存覆蓋:

for(i=0 ; i<=row_max ; i++) 
{ 
    for(j=0 ; j<=col_max; j++) 
    { 
     unit_matrix[i][j]=0; 
    } 
} 

哇,該陣列在整個程序覆蓋。你需要增加陣列的大小,或者改變邏輯來不要在每個地方都輸入'4'。你在世界上哪裏得到這個?這太可怕了!它也使用指向垃圾內存的指針和一些其他非常糟糕的事情。因爲這是垃圾,請在其他地方查看代碼。

+0

是這段代碼不好?(i = 0; i <= row_max-1; i ++) {0}; j = col_max-1; j ++) unit_matrix [i] J] = 0; } } – 2013-05-14 17:39:41

+0

btw,謝謝.. :) – 2013-05-14 17:42:01

+0

整個代碼對你使用的矩陣的大小做出了不正確的假設。如果我看到這樣的基本錯誤,我擔心其餘的可能也是垃圾。 – 2013-05-14 18:16:23