Chinaunix
±êÌâ:
linux Cһվʽѧϰ
[´òÓ¡±¾Ò³]
×÷Õß:
bellszhu
ʱ¼ä:
2013-04-21 16:42
±êÌâ:
linux Cһվʽѧϰ
Õâ±¾ÊéµÄ12.3½Ú£¬Àý×Ó12.3 ÓÃÉî¶ÈÓÅÏÈËÑË÷½âÃÔ¹¬ÎÊÌâ¡£¡£
¸öÈ˾õµÃ²»ÊÇÉî¶ÈÓÅÏÈ°¡£¬¶øÊǹã¶ÈÓÅÏÈѽ¡£¡£ÇëÎÊÊDz»ÊÇ£¿
³ÌÐòÈçÏ£º
#include <stdio.h>
#define MAX_ROW 5
#define MAX_COL 5
struct point {int row, col;} stack[512];
int top = 0;
void push(struct point p) {
stack[top] = p;
top++;
}
struct point pop(void) {
top--;
return stack[top];
}
int is_empty(void) {
return top == 0;
}
int maze[MAX_ROW][MAX_COL] = {
0, 1, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};
void print_maze(void) {
int i, j;
for (i = 0; i < MAX_ROW; i++) {
for (j = 0; j < MAX_COL; j++) {
printf("%d ", maze[i][j]);
}
putchar('\n');
}
}
struct point predecessor[MAX_ROW][MAX_COL] = {
{{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
{{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
{{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
{{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
{{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},
};
void visit(int row, int col, struct point pre) {
struct point visit_point = {row, col};
maze[row][col] = 2;
predecessor[row][col] = pre;
push(visit_point);
}
int main(void) {
struct point p = {0, 0};
maze[p.row][p.col] = 2;
push(p);
while(!is_empty()) {
p = pop();
if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) {
break;
}
if (p.row + 1 < MAX_ROW && maze[p.row + 1][p.col] == 0) {
visit(p.row + 1, p.col, p);
}
if (p.col + 1 < MAX_COL && maze[p.row][p.col + 1] == 0) {
visit(p.row, p.col + 1, p);
}
if (p.col - 1 >= 0 && maze[p.row][p.col - 1] == 0) {
visit(p.row, p.col - 1, p);
}
if (p.row - 1 >= 0 && maze[p.row - 1][p.col] == 0) {
visit(p.row - 1, p.col, p);
}
print_maze();
}
if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) {
printf("(%d, %d) \n", p.row, p.col);
while (predecessor[p.row][p.col].row != -1) {
p = predecessor[p.row][p.col];
printf("(%d, %d)\n", p.row, p.col);
}
} else {
printf("No path!\n");
}
return 0;
}
¸´ÖÆ´úÂë
»¶Ó¹âÁÙ Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2