| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1365 人关注过本帖
标题:迪杰斯特拉求解 时限1s
取消只看楼主 加入收藏
xiaohuo66
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2020-11-1
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:2 
迪杰斯特拉求解 时限1s
魔法少女Clara有一个N*M的迷宫,他想让你告诉他,从起点出发到终点最少经过多少障碍物?

Input
第一行一个整数T(1 <= T <= 30), 表示数据组数,接下来T组数据:

每组数据第一行是两个整数N和M(2 <= N, M <= 300),表示迷宫大小。

接下来N行,每行M个字母,表示Clara的迷宫。其中'#'表示障碍物, 'S'表示起点, 'T'表示终点, '.'表示空地。保证起点和终点都是空地。每次移动可以从当前所在空地移动到相邻的空地。保证每个迷宫中有且仅有一个S,有且仅有一个T。

Output
对于每组数据,在单独的一行中输出一个整数,表示Clara从起点出发到终点至少需要经过的障碍物数量。

Sample Input
2
5 5
S....
####.
.....
.####
....T
5 5
S....
####.
.###.
.####
....T


Sample Output
0
1
搜索更多相关主题的帖子: 数据 表示 迷宫 整数 起点 
2020-12-05 18:38
xiaohuo66
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2020-11-1
收藏
得分:0 
回复 2楼 rjsp
我写了下迷宫代码,但是我不会标记障碍物连着障碍物,而且迷宫走的也有问题,请指教
#include<string.h>
#include<stdio.h>
int n,m;
typedef struct{
    int x; int y;
}pos;

int sx,sy,gx,gy;
const int base = -1;
char maze[105][105];
int d[105][105];
pos c[10005];
int dx[4] = {1,0,-1,0},dy[4]={0,1,0,-1};
int bfs(int n,int m){
   for( int i = 1 ; i <= n ; i++)
        {
            for( int j = 1 ; j <= m ; j++)
            {
                d[i][j] = base;
                scanf(" %c", &maze[i][j]);
                 if(maze[i][j] == 'S'){
                    sx = i;
                    sy = j;
                    }
                if(maze[i][j] == 'T'){
                    gx = i;
                    gy = j;
                    }
            }
        }
d[sx][sy] = 0;
int l = 0,r = 1;
while(l < r){
    sx = c[l].x;
    sy = c[l].y;
    l++;
       if(sx == gx && sy == gy)break;
       for(int i = 0 ; i < 4 ; i++){
           int nx = sx + dx[i],ny = sy + dy[i];
           if(0 <= nx && nx < m && 0 <= ny && ny < n && maze[nx][ny] != '#' && d[nx][ny] == base){
            maze[nx][ny] = 0;
               //d[nx][ny] = d[sx][sy] + 1;
               c[r].x = nx;
               c[r].y = ny;
               r++;
           }
           if(0 <= nx && nx < m && 0 <= ny && ny < n && maze[nx][ny] == '#'){
            maze[nx][ny] = 1;
            c[r].x = nx;
               c[r].y = ny;
               r++;
           }
       }
   }
   return d[gx][gy];
   }
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
    scanf("%d%d",&n,&m);
   int ans = bfs(n,m);
    printf("%d\n",ans);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++) {
            printf("%d ", maze[i][j]);
        }
        printf("\n");
    }
    return 0;
}
}
2020-12-06 13:30
xiaohuo66
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2020-11-1
收藏
得分:0 
回复 7楼 rjsp
确实 tle 超时了
2020-12-10 19:17
快速回复:迪杰斯特拉求解 时限1s
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016244 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved