Beispiel #1
0
        public static IDictionary <char, int> scan_reachable(WorldSlow world, Point start, string allowed)
        {
            //var res = {};
            var res     = new Dictionary <char, int>();
            var seen    = new HashSet <Point>();
            var pending = new Queue <Point>();

            pending.Enqueue(start);
            seen.Add(start);
            while (pending.Count != 0)
            {
                var point = pending.Dequeue();
                for (var i = 0; i < 4; i++)
                {
                    var neighbor = point.step((Dir)i);
                    if (seen.Contains(neighbor))
                    {
                        continue;
                    }
                    seen.Add(neighbor);
                    var cell = world.get(neighbor);
                    var c    = cell != null?cell.get_char() : ' ';

                    if (c == '-' || c == '\\' || c == '|')
                    {
                        c = '/';
                    }
                    if (res.ContainsKey(c))// (res[c])
                    {
                        res[c]++;
                    }
                    else
                    {
                        res[c] = 1;
                    }
                    if (allowed.Contains(c))
                    {
                        pending.Enqueue(neighbor);
                    }
                }
            }
            return(res);
        }