在這個程序中,有一個使用2維數組構建的6×6地圖。這個程序的目的是通過障礙物導航一個物體。每個座標都包含一個值,每個值表示對象與目標之間的距離,如果它是對象的新座標。對象的初始座標是(0,5),其目標座標是(5,0)。價值50意味着障礙。該對象應該選擇包含最小值的下一個座標。目的地的座標值爲0 這是圖:我的代碼有什麼問題?多維數組? C編程
0 | 1 | 2 | 3 | 4 | 5
0| 7 | 50| 3 | 2 | 1 | 0
1| 6 | 5 | 4 | 3 | 2 | 1
2| 7 | 6 | 5 | 50| 50| 50
3| 8 | 7 | 6 | 7 | 8 | 9
4| 50| 50| 50| 50| 50| 10
5| 0 | 15| 14| 13| 12| 11
該程序是假設輸出從(0,5)的一系列座標到(5,0)。
#include<stdio.h>
#include<stdlib.h>
//These are the functions to move the object through the map.
void moveForward(int new_c[1][2]);
void moveBackward(int new_c[1][2]);
void moveLeft(int new_c[1][2]);
void moveRight(int new_c[1][2]);
int main()
{
int map[6][6]={{7,50,3,2,1,0},
{6,5,4,3,2,1},
{7,6,5,50,50,50},
{8,7,6,7,8,9},
{50,50,50,50,50,10},
{0,15,14,13,12,11}};
int coordinate[1][2]={{0,5}};
int x = 0;
int y = 5;
printf("(%d,%d),",x,y);
while(x!=5&&y!=0)
{
if(map[y-1][x] < map[y+1][x] && //Forward < Backward
map[y-1][x] < map[y][x-1] && //Forward < Left
map[y-1][x] < map[y][x+1] && //Forward < Right
y - 1 >= 0 &&
y + 1 <= 5 &&
x - 1 >= 0 &&
x + 1 <= 5)
{
moveForward(coordinate);
y = y - 1;
}
else
{
if(map[y+1][x] < map[y-1][x] && //Backward < Forward
map[y+1][x] < map[y][x-1] && //Backward < Left
map[y+1][x] < map[y][x+1] && //Backward < Right
y - 1 >= 0 &&
y + 1 <= 5 &&
x - 1 >= 0 &&
x + 1 <= 5)
{
moveBackward(coordinate);
y = y + 1;
}
else
{
if(map[y][x-1] < map[y][x+1] && //Left < Right
map[y][x-1] < map[y+1][x] && //Left < Backward
map[y][x-1] < map[y-1][x] && //Left < Forward
y - 1 >= 0 &&
y + 1 <= 5 &&
x - 1 >= 0 &&
x + 1 <= 5)
{
moveLeft(coordinate);
x = x + 1;
}
else
{
if(map[y][x+1] < map[y][x-1] && //Right < Left
map[y][x+1] < map[y+1][x] && //Right < B
map[y][x+1] < map[y-1][x] && //Right < F
y - 1 >= 0 &&
y + 1 <= 5 &&
x - 1 >= 0 &&
x + 1 <= 5)
{
moveRight(coordinate);
x = x - 1;
}
}
}
}
}
return 0;
}
void moveForward(int new_c[1][2])
{ //This modifies the y coordinate.
new_c[0][1] = new_c[0][1] - 1;
printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
void moveBackward(int new_c[1][2])
{ //This modifies the y coordinate.
new_c[0][1] = new_c[0][1] + 1;
printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
void moveLeft(int new_c[1][2])
{ //This modifies the x coordinate.
new_c[0][0] = new_c[0][0] - 1;
printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
void moveRight(int new_c[1][2])
{ //This modifies the x coordinate.
new_c[0][0] = new_c[0][0] + 1;
printf("(%d,%d),", new_c[0][0], new_c[0][1]);
}
Output:
(0,5),
然後光標就像往常一樣閃爍。 底部沒有聲明返回值或執行時間。
'if(map [y] [x + 1]
你是否嘗試用調試器單步執行代碼? – pm100
您的循環在某處出現了無限循環 - 您可能未滿足if語句中的任何條件 - 嘗試使用調試器單步執行程序並查看出了什麼問題。 – Soren