使用两种语言实现,先贴C++的

class Solution {
public:
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
        int row = image.size();
        int col = image[0].size();

        int oldColor = image[sr][sc];
        if (oldColor == newColor)
        {
            return image;
        }
        queue<pair<int, int>> Q;
        Q.push(make_pair(sr, sc));

        const int N = 51;

        int Visited[N][N];

        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                Visited[i][j] = false;
            }
        }

        while (!Q.empty())
        {
            pair<int, int> Node = Q.front();
            Q.pop();
            int x = Node.first;
            int y = Node.second;
            if (Visited[x][y])
            {
                continue;//略过此点
            }
            else
            {
                Visited[x][y] = true;
                image[x][y] = newColor;
            }
            pair<int, int> Up_Node = make_pair(x - 1, y);
            pair<int, int> Down_Node = make_pair(x + 1, y);
            pair<int, int> Left_Node = make_pair(x, y - 1);
            pair<int, int> Right_Node = make_pair(x, y + 1);

            if (Up_Node.first >= 0 && !Visited[Up_Node.first][Up_Node.second] && image[Up_Node.first][Up_Node.second] == oldColor)
            {
                Q.push(Up_Node);
            }

            if (Down_Node.first <= row - 1 && !Visited[Down_Node.first][Down_Node.second] && image[Down_Node.first][Down_Node.second] == oldColor)
            {
                Q.push(Down_Node);
            }

            if (Left_Node.second >= 0 && !Visited[Left_Node.first][Left_Node.second] && image[Left_Node.first][Left_Node.second] == oldColor)
            {
                Q.push(Left_Node);
            }

            if (Right_Node.second <= col - 1 && !Visited[Right_Node.first][Right_Node.second] && image[Right_Node.first][Right_Node.second] == oldColor)
            {
                Q.push(Right_Node);
            }
        }

        return image;
    }
};

 

下面贴出C#的

public class Solution
    {
        public int[,] FloodFill(int[,] image, int sr, int sc, int newColor)
        {
            int row = image.GetLength(0);
            int col = image.GetLength(1);

            int oldColor = image[sr, sc];
            if (oldColor == newColor)
            {
                return image;
            }
            Queue<KeyValuePair<int, int>> Q = new Queue<KeyValuePair<int, int>>();
            Q.Enqueue(new KeyValuePair<int, int>(sr, sc));

            bool[,] Visited = new bool[row, col];

            while (Q.Any())
            {
                var Node = Q.Dequeue();
                int x = Node.Key;
                int y = Node.Value;
                if (Visited[x, y])
                {
                    continue;//略过此点
                }
                else
                {
                    Visited[x, y] = true;
                    image[x, y] = newColor;
                }
                var Up_Node = new KeyValuePair<int, int>(x - 1, y);
                var Down_Node = new KeyValuePair<int, int>(x + 1, y);
                var Left_Node = new KeyValuePair<int, int>(x, y - 1);
                var Right_Node = new KeyValuePair<int, int>(x, y + 1);

                if (Up_Node.Key >= 0 && !Visited[Up_Node.Key, Up_Node.Value] && image[Up_Node.Key, Up_Node.Value] == oldColor)
                {
                    Q.Enqueue(Up_Node);
                }

                if (Down_Node.Key <= row - 1 && !Visited[Down_Node.Key, Down_Node.Value] && image[Down_Node.Key, Down_Node.Value] == oldColor)
                {
                    Q.Enqueue(Down_Node);
                }

                if (Left_Node.Value >= 0 && !Visited[Left_Node.Key, Left_Node.Value] && image[Left_Node.Key, Left_Node.Value] == oldColor)
                {
                    Q.Enqueue(Left_Node);
                }

                if (Right_Node.Value <= col - 1 && !Visited[Right_Node.Key, Right_Node.Value] && image[Right_Node.Key, Right_Node.Value] == oldColor)
                {
                    Q.Enqueue(Right_Node);
                }
            }

            return image;
        }
    }

 

posted on 2018-09-30 17:52  Sempron2800+  阅读(143)  评论(0编辑  收藏  举报