| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 186 人关注过本帖
标题:迷宫问题
收藏  订阅  推荐  打印 
rainbowbin
Rank: 1
等级:新手上路
帖子:7
积分:184
注册:2008-7-8
迷宫问题

有哪位大虾帮帮,错哪了?
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define max_m 1000
#define max_n 1000

int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int maze[max_m][max_n];
int m,n,start_row,start_col,end_row,end_col;
char c;

void read_maze()
{
int i,j;
char buf[256];
memset(buf, 0, sizeof(buf));
fgets(buf, 256, stdin);
sscanf(buf, "%d%d", &m, &n);
fgets(buf, 256, stdin);
sscanf(buf, "%d%d", &start_row, &start_col);
start_row--;start_col--;
fgets(buf, 256, stdin);
sscanf(buf, "%d%d", &end_row, &end_col);
end_row--;end_col--;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%c", &c);
maze[i][j] = (c != '.');
}
fgets(buf, 256, stdin);
}
}

int new_value(int row, int col)
{
int i,new_row,new_col;
int result;
result = maze[row][col];
if (result == 0)
{
for (i = 0; i < 4; i++)
{
new_row = row + dir[i][0];
new_col = col + dir[i][1];
if (new_row >= 0 && new_row < m && new_col >= 0 && new_col < n && maze[new_row][new_col] < 0 && (result == 0 || maze[new_row][new_col] - 1 > result))
{
result = maze[new_row][new_col] - 1;
}
}
}
return result;
}

int find_shortest_path()
{
int changed,i,j,new_val,expect_val;
if (start_row < 0 || start_row >= m || start_col < 0 || start_col >= n || end_row < 0 || end_row >= m || end_col < 0 || end_col >= n || maze[start_row][start_col] != 0 || maze[end_row][end_col] != 0)
{
return 0;
}
changed = 1;
maze[end_row][end_col] = -1;
expect_val = -2;
while (changed && maze[start_row][start_col] == 0)
{
changed = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
new_val = new_value(i,j);
if (new_val == expect_val && new_val != maze[i][j])
{
maze[i][j] = new_val;
changed = 1;
}
}
expect_val--;
}
return (maze[start_row][start_col] < 0);
}

void print_shortest_path()
{
int i,j,new_i,new_j,expect_val,k;
if (maze[start_row][start_col] >= 0)
{
printf("No path!\n");
return;
}
printf("%d %d\n", start_row+1, start_col+1);
i = start_row;
j = start_col;
for (expect_val = maze[start_row][start_col]+1; expect_val <= -1; expect_val++)
{
for (k = 0; k < 4; k++)
{
new_i = i + dir[k][0];
new_j = j + dir[k][1];
if (new_i >= 0 && new_i < m && new_j >= 0 && new_j < n && maze[new_i][new_j] == expect_val)
{
i = new_i;
j = new_j;
printf("%d %d\n", i+1,j+1);
break;
}
}
}
}

int main()
{
read_maze();
if (find_shortest_path())
{
print_shortest_path();
}
else
{
printf("No path!\n");
}
return 0;
}
搜索更多相关主题的帖子: 迷宫  buf  start  fgets  col  
2008-7-9 09:55
空格姐姐
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2008-7-7

...
格式不好
2008-7-9 10:32
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050981 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved