0
這個問題我想解決在C: http://i.stack.imgur.com/X70nX.png隨機漫步10x10?
我寫了這段代碼,但我不知道什麼是錯的。它不給我任何輸出,只是一個空屏幕! 1
這是我的代碼:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
#define ROW 10
#define COL 10
#define RIGHT 0
#define UP 1
#define LEFT 2
#define DOWN 3
int main(void)
{
char mat[ROW][COL];
bool try;
int move, co, ro,letter;
//Filling the grid with "."
for (ro = 0; ro < ROW; ro++)
{
for (co = 0; co < COL; co++)
mat[ro][co] = '.';
}
//Initial Values
co = 0; ro = 0; mat[0][0] = 'A';
srand((unsigned)time(NULL));
for (letter = 1; letter < 26; letter++)
{
try = true;
while (try)
{
move = rand() % 4;
if ((move == RIGHT) && (co + 1 < COL) && (mat[ro][co+1]=='.'))
{
mat[ro][co + 1] = mat[ro][co] + 1;
co++; try=false;
}
if ((move == UP) && (ro - 1 >= 0) && (mat[ro-1][co]=='.'))
{
mat[ro - 1][co] = mat[ro][co] + 1;
ro--; try = false;
}
if ((move == LEFT) && (co - 1 >= 0) && (mat[ro][co-1]=='.'))
{
mat[ro][co - 1] = mat[ro][co] + 1;
co--; try = false;
}
if ((move == DOWN) && (ro + 1 < ROW) && (mat[ro+1][co]=='.'))
{
mat[ro + 1][co] = mat[ro][co] + 1;
ro++;
}
}
}
//Printing The GRID
for (ro = 0; ro < ROW; ro++)
{
for (co = 0; co < COL; co++)
printf(" %c", mat[ro][co]);
printf("\n");
}
return 0;
}
現在有大約同樣的問題在這裏類似的討論:Random walk on 10x10 Array
,但我仍然不知道什麼是我的代碼的問題! ...請把我當成初學者吧。
修訂: 這是考慮各種意見,考慮後的新一個:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
#define ROW 10
#define COL 10
#define RIGHT 0
#define UP 1
#define LEFT 2
#define DOWN 3
int main(void)
{
char mat[ROW][COL];
bool try;
int move, co, ro,letter,blocked;
//Filling the grid with "."
for (ro = 0; ro < ROW; ro++)
{
for (co = 0; co < COL; co++)
mat[ro][co] = '.';
}
//Initial Values
co = 0; ro = 0; mat[0][0] = 'A';
srand((unsigned)time(NULL));
for (letter = 1; letter < 26; letter++)
{
try = true;
blocked = 0;
while (try)
{
move = rand() % 4;
switch (move)
{
case RIGHT:
{ if ((co + 1 < COL) && (mat[ro][co + 1] == '.'))
{
mat[ro][co + 1] = mat[ro][co] + 1;
co++; try = false; break;
}
else { blocked++; break; }}
case UP:
{ if ((move == UP) && (ro - 1 >= 0) && (mat[ro - 1][co] == '.'))
{
mat[ro - 1][co] = mat[ro][co] + 1;
ro--; try = false; break;
}
else { blocked++; break; }}
case LEFT:
{ if ((move == LEFT) && (co - 1 >= 0) && (mat[ro][co - 1] == '.'))
{
mat[ro][co - 1] = mat[ro][co] + 1;
co--; try = false; break;
}
else { blocked++; break; }}
case DOWN:
{if ((move == DOWN) && (ro + 1 < ROW) && (mat[ro + 1][co] == '.'))
{
mat[ro + 1][co] = mat[ro][co] + 1;
ro++; try = false; break;
}
else { blocked++; break; }}
}
if (blocked == 4)
{try = false; letter=26;}
}
}
//Printing The GRID
for (ro = 0; ro < ROW; ro++)
{
for (co = 0; co < COL; co++)
printf(" %c", mat[ro][co]);
printf("\n");
}
return 0;
}
工作代碼只是偶爾,但它「Z」之後不會停止(它應該是字母= 26) ,
我不知道c(我知道Java),但是你不必在最後關閉大括號嗎? 'for'括號和'int main'括號? – 2013-12-22 15:31:50
他們被關閉。 –
有一個錯誤是,代碼沒有設置'嘗試= false'在步驟關閉後。因此,它永遠不會認爲它已經下臺,並且在此之後總是會採取額外措施。這不是你問題的原因 - 走進一個角落是 - 但額外的步驟幾乎肯定會使問題變得更糟。 [本來是作爲答案給出的,但因爲它不是一個好答案而搬到這裏] –