c# – Flood填充递归算法

c# – Flood填充递归算法,第1张

概述我正在尝试制作一个可以在c#中填充int数组的算法.基本上,作为MS Paint中的填充工具,我有一个颜色,如果我在数组中选择(x,y)坐标,它会用新颜色替换所有具有相同初始颜色的邻居. 例如: [0,0,0][0,1,0][1,1,0] 如果我将3放入(0,0),则数组变为: [3,3,3][3,1,3][1,1,3] 所以我在递归中尝试了它,它确实有效,但不是所有时间.实际上,我有时会 我正在尝试制作一个可以在c#中填充int数组的算法.基本上,作为MS Paint中的填充工具,我有一个颜色,如果我在数组中选择(x,y)坐标,它会用新颜色替换所有具有相同初始颜色的邻居.

例如:

[0,0][0,1,0][1,0]

如果我将3放入(0,0),则数组变为:

[3,3,3][3,3][1,3]

所以我在递归中尝试了它,它确实有效,但不是所有时间.实际上,我有时会出现“Stack Overflow”错误(似乎合适).
这是我的代码,如果你能告诉我什么是错的话会很棒:)

public int[,] fill(int[,] array,int x,int y,int initialint,int newInt){    if (array[x,y] == initialint)    {        array[x,y] = newInt;        if (x < array.GetLength(0) - 1)            array = fill(array,(x + 1),y,initialint,newInt);        if (x > 0)            array = fill(array,(x - 1),newInt);        if (y < array.GetLength(1) - 1)            array = fill(array,x,(y + 1),newInt);        if (y > 0)            array = fill(array,(y - 1),newInt);    }    return array;}

谢谢 !

解决方法 如何使用堆栈/队列来管理剩余的工作?
public voID Fill(int[,int newInt){    int initial = array[x,y];    Queue<Tuple<int,int>> queue = new Queue<Tuple<int,int>>();    queue.Push(new Tuple<int,int>(x,y));    while (queue.Any())    {        Tuple<int,int> point = queue.Dequeue();        if (array[point.Value1,point.Value2] != initial)            continue;        array[point.Value1,point.Value2] = newInt;        EnqueueIfMatches(array,queue,point.Value1 - 1,point.Value2,initial);        EnqueueIfMatches(array,point.Value1 + 1,point.Value1,point.Value2 - 1,point.Value2 + 1,initial);            }}private voID EnqueueIfMatches(int[,Queue<Tuple<int,int>> queue,int initial){    if (x < 0 || x >= array.GetLength(0) || y < 0 || y >= array.GetLength(1))        return;    if (array[x,y] == initial)       queue.Enqueue(new Tuple<int,y));}
总结

以上是内存溢出为你收集整理的c# – Flood填充递归算法全部内容,希望文章能够帮你解决c# – Flood填充递归算法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1251783.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存