1

私が書いているいくつかのコードに問題があります。私が疑問に思っているのと同じ質問をすでにしている人をたくさん見つけたので、私はこのサイトをよく利用しています。ここで、私のプログラミングの難問に対する以前のすべての洞察について、ここのコミュニティに感謝したいと思います。(そして、行き過ぎる前に、いいえ、これは「学校のプロジェクト」や「学校の宿題」ではありません。私は単に「巡回セールスマン問題」を解決し、私の C スキルを向上させようとしています。

これは私が立ち往生しているコードの部分です:

   void printAndFlip(int arrayone[][20], int citytotal, int arrayCities[])
   {

////Finds cost:
int x, y, z;
int totalCost
int singleTrip;
int cheepestTrip;
int nCity = citytotal + 1;      //nCity is the number of Cities //Adding one to accomadate going back to the first city
int gCounter;
int gCounterTrue = 1;
int cheepestTrip[20];
int totalCost = 0;
int lCounter;
int i;
int n = citytotal;


////Sets up for a default case to set cheepestTrip:
for(gCounter = 1; gCounter <= nCity; gCounter++)
{
    while(gCounterTrue == 1)
    {
        if(gCounter == arrayCities[gCounter])
        {
            gCounterTrue = 1;
        }
        else
        {
            gCounterTrue = 0;
            gCounter = 50;      //Stopping the larger for loop with 50 (the nCity can't be larger than 20) so that it will hopefully be faster
        }
        if(gCounter == nCity)
        {
            if(arrayCities[1] == arrayCities[nCity])
            {
!!!!!               cheepestTrip = totalCost;
            }
        }   
    }
}
for(x = 1; x < nCity; x++)
{
    y = arrayCities[x];
    z = arrayCities[x+1];
    singleTrip = arrayone[y][z];        //finding individual cost of each trip...will be added to 'totalCost' below
    totalCost = singleTrip + totalCost;
} 

!!!!!!!!  if(totalCost <= cheepestTrip)
{
    for(lCounter = 1; lCounter <= nCity; lCounter++)
    {
        cheepestTrip[lCounter] = arrayCities[lCounter];
    }
}

コンパイル エラーがどこにあるかを簡単に示すために、行に感嘆符を付けました。私が間違っているかどうか教えてください。しかし、'arrayone' を printANDFlip に送信するときに、ポインターの配列を配列で渡していますよね? コンパイル エラーがポインターに関連していることはわかっていますが、どこに配置すればよいかわかりません。ありとあらゆる助けをいただければ幸いです。どうもありがとう、アレックス

4

4 に答える 4

1

cheepestTrip配列の名前で、最初の要素へのポインタに相当します。totalCostですint[20]コードの上部にある宣言から を削除するだけです。

于 2013-03-07T19:44:20.617 に答える
1

ここでは、配列ポインターを int 値と比較しています

if(totalCost <= cheepestTrip)

たとえば、その配列の要素と比較する必要があります

  if(totalCost <= cheepestTrip[0])
于 2013-03-07T19:42:09.423 に答える
1

他の返信のいくつかが言っていることを明確にするために:同じ名前で異なるタイプの2つの変数があります:

int cheepestTrip;  /* This is an single integer... */

int cheepestTrip[20];  /* ...but this is an array of integers. */

これは、コンパイル時に警告をトリガーする必要があります (おそらく、既存の変数の再宣言に関する何か)。

于 2013-03-07T21:55:12.260 に答える
0

特定のコンパイラが許可していない可能性があるintとポインターを比較しています(ただし、Cではできますが)。ただし、 recentTrip は基本的に int の配列の最初の要素へのポインターですが、 totalcost は単に int プリミティブです。

于 2013-03-07T19:44:41.737 に答える