迷宫-BFS

迷宫问题
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status

Description

定义一个二维数组: 
int maze[5][5] = {

 0, 1, 0, 0, 0,

 0, 1, 0, 1, 0,

 0, 0, 0, 0, 0,

 0, 1, 1, 1, 0,

 0, 0, 0, 1, 0,

};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

最简单的求最短路径问题,用BFS来解决,这里需要注意的是结构体里要定义一个字符串变量用来保存走过的路。

#include <queue>
#include <string.h>
#include <iostream>
using namespace std;

#define MAXN 10
//定义方向,顶部开始,顺时针
int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};

int a[MAXN][MAXN];
//作用:标记,走过的结点标记为1
int vis[MAXN][MAXN];

struct Node
{
    int x;
    int y;
    string s; //字符串s保存走过的结点
}now, nextStep;

//判断结点能否通过
bool isPracticable(Node node)
{
    //当超出边界,或者已经被标记访问过,或者遇到障碍物都不能再通过
    if (node.x < 0 || node.x > 5 || node.y < 0 || node.y > 5 || vis[node.x][node.y] || a[node.x][node.y]) {
        return 0;
    }
    return 1;
}

void BFS()
{
    queue<Node> Q;
    now.x = 0;
    now.y = 0;
    now.s = "00";
    Q.push(now);
    vis[now.x][now.y] = 1;
    
    while (!Q.empty()) {
        //获取队列首部元素
        now = Q.front();
        if (now.x == 4 && now.y == 4) {  //走到右下角,输出结果
            for (int i = 0; i < now.s.length(); i = i + 2) {
                cout << "(" << now.s[i] << ", " << now.s[i+1] << ")" << endl;
            }
            return;
        }
        
        for (int i = 0; i < 4; i++) {   //按照上、右、下、左的方向搜索,搜索方向可随意,但是要保证四个方向都被搜索一遍
            nextStep.x = now.x + dir[i][0];
            nextStep.y = now.y + dir[i][1];
            nextStep.s = now.s;
            if (isPracticable(nextStep)) {
                char x = nextStep.x + 48;
                char y = nextStep.y + 48;
                nextStep.s += x;
                nextStep.s += y;
                Q.push(nextStep);
                vis[nextStep.x][nextStep.y] = 1;
            }
        }
        //把对首元素排出队列
        Q.pop();
    }
}


int main(int argc, const char * argv[]) {
    
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            cin >> a[i][j];
        }
    }
    BFS();
    return 0;
}

转载于:https://www.cnblogs.com/itbsl/p/9907864.html

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值