- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有一个矩阵,其中包含白色单元格(表示为1),黑色单元格(表示为0)和只有一个灰色单元格(表示为2),需要从(0,0)到(N-1, N-1) 数组[N][N].
约束:
1) 路径应该只覆盖白色单元格并且必须经过灰色单元格(这个灰色单元格可以在数组中的任何位置)
2) 访问过的节点不能再次访问。
以下是典型的迷宫问题解决方案,但此解决方案无法处理遍历灰色单元格的特定情况...因此您能否帮我修改以下代码以处理特定情况。
我的问题是我不确定如何检查灰色单元格?
#include "stdafx.h"
#include "algorithm"
#include <iostream>
#include <fstream>
using namespace std;
#include<stdio.h>
// Maze size
#define N 4
bool solveMazeUtil(int maze[N][N], int x, int y, int sol[N][N]);
/* A utility function to print solution matrix sol[N][N] */
void printSolution(int sol[N][N])
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
printf(" %d ", sol[i][j]);
printf("\n");
}
}
/* A utility function to check if x,y is valid index for N*N maze */
bool isSafe(int maze[N][N], int x, int y)
{
//solveMazeUtil() to solve the problem. It returns false if no path is possible,
//otherwise return true and prints the path in the form of 1s. Please note that
//there may be more than one solutions, this function prints one of the feasible
if(x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 1)
// if (x,y outside maze) return false
return true;
return false;
}
/* This function solves the Maze problem using Backtracking. It mainly uses
solutions.*/
bool solveMaze(int maze[N][N])
{
int sol[N][N] = { {0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0}
};
if(solveMazeUtil(maze, 0, 0, sol) == false)
{
printf("Solution doesn't exist");
return false;
}
printSolution(sol);
return true;
}
/* A recursive utility function to solve Maze problem */
bool solveMazeUtil(int maze[N][N], int x, int y, int sol[N][N])
{
// if (x,y is goal) return true
if(x == N-1 && y == N-1)
{
sol[x][y] = 1;
return true;
}
// Check if maze[x][y] is valid
if(isSafe(maze, x, y) == true)
{
// mark x,y as part of solution path
sol[x][y] = 1;
/* Move forward in x direction */
if (solveMazeUtil(maze, x+1, y, sol) == true)
return true;
/* If x moving in x direction doesn't give solution then
Move down in y direction */
if (solveMazeUtil(maze, x, y+1, sol) == true)
return true;
/* If none of the above movements work then BACKTRACK:
unmark x,y as part of solution path */
sol[x][y] = 0;
return false;
}
return false;
}
// driver program to test above function
int main()
{
int maze[N][N] = { {1, 0, 0, 0},
{1, 1, 0, 1},
{0, 1, 0, 0},
{1, 1, 1, 1}
};
solveMaze(maze);
getchar();
return 0;
}
我想到的一个解决方案是:
产生所有可能的路径(遍历 1 或 2)。
然后,找出哪条路径中有2。然后打印该路径作为输出。
但我认为这不是好的方法...所以,请让我知道如何以体面的方式实现我的目标。谢谢
最佳答案
因为在你的代码中你只使用了两种可能的移动:向下和向右那么这是一个 DAG . DAG 适用于动态规划方法:每个单元格有两种到达那里的可能性,一种来自上方,另一种来自左侧。因此,单元格的最小距离是:
cost[i][j] = min(cost[i][j-1],cost[i-1][j]) + 1
这是考虑到做一次运动的成本是1。如果单元格是黑色的,你可以给它无限的成本,你只需要找到一条从P1(start)
到的路径P2(gray cell)
然后是从 P2
到 P3(goal)
的路径。
为了重建路径,您可以创建另一个父矩阵 pi[N][N]
,如果最短路径来自上面,则 pi[i][j] = ( i-1, j)
如果来自左边 pi[i][j] = (i, j-1)
如果不可能到达那个单元格 pi[i ][j] = null(随便你)
。
关于c++ - 无法在迷宫中追踪灰色细胞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478345/
我想将灰度化的 iplimage 转换为 uiimage,反之亦然。我有如下两种方法在 RGB 色彩空间转换中成功,但对于灰色图像没有成功。 - (UIImage *)UIImageFromIplIm
我有一个服务器/客户端应用程序。服务器为每个客户端都有按钮。连接客户端后,按钮将变为启用状态,您可以单击该按钮。单击该按钮时,会出现一个新窗口,显示该特定客户端的信息,如 IP 地址、端口号等。 现在
在我的代理模型中,基础 QSortFilterProxyModel 在 flags 中虚方法: Qt::ItemFlags File_List_Proxy::flags(const QModelInd
我正在尝试重新创建此 UISearchBar(如表搜索示例代码中所示): alt text http://img168.imageshack.us/img168/6378/43558113.png 我
我正在尝试突出显示页面其余部分的 div/灰色。我的代码是: jQuery(document).ready(function ($) { $('.entry-content').mouseover(f
编辑2:如果我尝试将 JLabel 添加到复选框所在的区域(您在第二张图片中看到),我也会得到一个白色/灰色区域。 编辑:另请注意:当我刚刚创建 JLabel 并在将 TotalResultArea
我使用的是 Xcode 5.1.1,部署到 SDK 7.1。出于某种原因,当我添加一个选项卡栏 Controller 时,底部的项目没有显示,所有底部栏都是灰色的,关联的 View Controlle
我在对话框中嵌入了一个无模式属性表。我没有为控件使用新的窗口类,但确实使属性表成为对话框中容器的子项。除了一件事,一切都很好。当用户点击属性表时,对话框的标题栏由蓝色(ACTIVE)变为灰色(INAC
我正在修改别人的代码。他们使用通过 BufferedImage 加载的 PNG。我需要加载一个 TGA,它只是一个 18 字节的 header 和 BGR 代码。我加载并运行了纹理,但我得到的是灰色框
有没有办法让 html 单选列表输入“变灰”?我知道我实际上可以改变颜色..但我想做到这一点,所以单选按钮列表也不能切换。我还希望它在此状态下“突出显示”或切换到特定的 radio 列表。 例如,对于
我有一个叠加层并在滚动条仍然可见时禁用滚动(变灰),我使用了: CSS html.noscroll { position: fixed; overflow-y: scroll;
我最近重命名了我的项目,并且出现了与 Xcode 试图用来访问我的文件的路径相关的各种错误。 这很可能是由于重命名项目的错误尝试,所以我收回了努力,决定只更改客户看到的应用程序的名称。无论如何,一个特
我已将项目的 minSdkVersion 设置为 19 并启用了 Instant Run 。我已经在运行 API 21 的设备上部署了该应用程序,但是“应用更改”按钮显示为灰色。当我将鼠标悬停在该按钮
我使用以下方法在我的 Cocoa 应用程序中加载自定义文件导入窗口: [NSApp runModalForWindow:window]; 窗口显示得很好,并且是模态的。 但是,应用程序主菜单仍然处于事
我似乎无法向模拟器添加任何模拟位置,因为相应的菜单已完全变灰,如图所示: 使用实际设备进行调试时,该位置效果很好。 任何想法? 最佳答案 必须先运行iOS模拟器,然后才能启用该菜单。对我来说,它在成功
每当自动布局约束从尺寸检查器中“删除”时,它实际上并没有被删除,而只是“卸载”。在这一点之后,它仍然存在,只是褪色/变灰,在左侧的场景层次结构中可见,当在尺寸检查器的约束下选择“全部”时。 场景层次:
我正在尝试拍摄照片,然后允许用户添加一些效果、绘图、将其他 Assets 拖到图像、添加文本等。就像 snapchat 相机。 我已经关注了 Camera 2 API sample .代码的主要部分位
我正在使用 Google map 在我的网站上显示很多兴趣点,但它实际上不起作用。最奇怪的是,在实践中,它之所以有效,是因为标记和集群工作正常,连接的 Action 也在工作,但 map 没有显示,
我在使用 Fotorama 4 时遇到了一些显示问题,我不知道如何解决它。 当我在 codepen.io 中预览代码时,它看起来不错,但是当我将它放入我正在为客户工作的 wix 网站时,一些缩略图只是
我不知道如何使 Tkinter Checkbutton 变灰。 我尝试使用 state=DISABLED 但它不起作用,我收到一条错误提示 _tkinter.TclError: bad option
我是一名优秀的程序员,十分优秀!