Java 将地图图像转换为二维阵列。算法dfs、bfs、astar

Java 将地图图像转换为二维阵列。算法dfs、bfs、astar,java,image,algorithm,breadth-first-search,Java,Image,Algorithm,Breadth First Search,我不知道如何开始这个项目。 我想得到二维阵列的像素定位。 然后使用bfs和dfs处理该数组,以获得从橙色圆点到绿色圆点的路径。 如果访问,则绘制灰色像素。 绘制路径并将其保存到其他图像 当我处理这个问题时,我想改变每个像素的成本(用油漆画一些类似于墙壁的东西,但可能会花费更高的成本) public int[][]gRGB(buffereImage图像) { int width=image.getWidth(); int height=image.getHeight(); int[][]结果=新i

我不知道如何开始这个项目。 我想得到二维阵列的像素定位。 然后使用bfs和dfs处理该数组,以获得从橙色圆点到绿色圆点的路径。 如果访问,则绘制灰色像素。 绘制路径并将其保存到其他图像

当我处理这个问题时,我想改变每个像素的成本(用油漆画一些类似于墙壁的东西,但可能会花费更高的成本)

public int[][]gRGB(buffereImage图像)
{
int width=image.getWidth();
int height=image.getHeight();
int[][]结果=新int[宽度][高度];
对于(int row=0;row
从这段代码中,我得到了满是-1值的2d数组。是否有选项将颜色信息作为值(不是rgb我希望它作为一个数字而不是4)

编辑:

protected static int [][] convert(BufferedImage image)
{
    int width = image.getWidth();
    int height = image.getHeight();

    int[][] result =  new int [width][height];

    for(int row = 0; row < height; row++)
        for(int col = 0; col < width; col++)
        {
            Color c = new Color(image.getRGB(col, row));
            String h = String.format("%02x%02x%02x", c.getRed(),c.getGreen(),c.getBlue());

            if(h.equals("000000"))     // black
            {
                result[col][row] = 0;
            }
            else if(h.equals("fe0000")) // red
            {
                result[col][row] = 5; 
            }
            else if(h.equals("ffffff")) // white
            {
                result[col][row] = 1;
            }
            else if(h.equals("ff7d41")) // orange - start
            {
                result[col][row] = 10;
            }
            else if (h.equals("ff0078")) // pink - end
            {
                result[col][row] = 9;
            }
            else
            {
                result[col][row] = 3;
            }

        }

    for(int row = 0; row < height; row++)
    {
        System.out.println();
        for(int col = 0; col < width; col++)
            System.out.print("\t" + result[col][row]);
    }

    return result;      
}
受保护的静态int[][]转换(BuffereImage图像)
{
int width=image.getWidth();
int height=image.getHeight();
int[][]结果=新int[宽度][高度];
对于(int row=0;row
现在我有了像素值的数组。有人能解释一下如何编写DFS或BFS算法吗??其中成本是像素的价值


要找到成本最低的路径,最好使用UCS、A*或IDA*等算法(使用BFS或DFS在加权图上查找最短路径效率很低)。我的建议是首先实现UCS,然后用一个简单的启发式方法改进它,比如曼哈顿距离a*。有关UCS和A*的完整说明,请参阅以下链接:



至于在2D数组上使用这些算法,应该考虑节点的每个点并将该节点连接到每个邻居节点。因此,每个节点都连接到其4个非墙邻居(如果可以对角移动,则连接到8个非墙邻居)。

是否要找到成本最低的路径?是。然后在图像上绘制路径。其中成本是颜色(白色像素-成本1,红色成本5)。但我不知道如何在2d阵列上实现dfs或bfs。结果[col][row]和邻居是结果[col+1][row+1]。。。。最后打印Pathk的总成本,感谢提供信息。我将从一个*算法开始。然后我将尝试bfs和dfs实现来测试它。
protected static int [][] convert(BufferedImage image)
{
    int width = image.getWidth();
    int height = image.getHeight();

    int[][] result =  new int [width][height];

    for(int row = 0; row < height; row++)
        for(int col = 0; col < width; col++)
        {
            Color c = new Color(image.getRGB(col, row));
            String h = String.format("%02x%02x%02x", c.getRed(),c.getGreen(),c.getBlue());

            if(h.equals("000000"))     // black
            {
                result[col][row] = 0;
            }
            else if(h.equals("fe0000")) // red
            {
                result[col][row] = 5; 
            }
            else if(h.equals("ffffff")) // white
            {
                result[col][row] = 1;
            }
            else if(h.equals("ff7d41")) // orange - start
            {
                result[col][row] = 10;
            }
            else if (h.equals("ff0078")) // pink - end
            {
                result[col][row] = 9;
            }
            else
            {
                result[col][row] = 3;
            }

        }

    for(int row = 0; row < height; row++)
    {
        System.out.println();
        for(int col = 0; col < width; col++)
            System.out.print("\t" + result[col][row]);
    }

    return result;      
}