static object Solve() { Console.ReadLine(); var(n, m) = Read2(); var map = GraphConsole.ReadUnweightedMap(n + 1, m, true); var r = map.Bfs(1); var dp = r.RawCosts.ToArray(); var q = Enumerable.Range(1, n).Select(v => (v, d: r[v])).OrderBy(t => - t.d); foreach (var(v, d) in q) { foreach (var nv in map[v]) { if (r[nv] <= r[v]) { dp[v] = Math.Min(dp[v], r[nv]); } else { dp[v] = Math.Min(dp[v], dp[nv]); } } } return(string.Join(" ", dp[1..]));
static object Solve() { Console.ReadLine(); var(n, m) = Read2(); var map = GraphConsole.ReadUnweightedMap(n + 1, m, true); var r = map.Bfs(1); var dp = Array.ConvertAll(new bool[n + 1], _ => - 1L); void Dfs(int v) { if (dp[v] >= 0) { return; } dp[v] = r[v]; foreach (var nv in map[v]) { if (r[nv] <= r[v]) { dp[v] = Math.Min(dp[v], r[nv]); } else { Dfs(nv); dp[v] = Math.Min(dp[v], dp[nv]); } } } Dfs(1); return(string.Join(" ", dp[1..]));
static object Solve() { var(n, m) = Read2(); var es = GraphConsole.ReadEdges(m); var k = int.Parse(Console.ReadLine()); var p = Read(); var map = new UnweightedMap(n + 1, es, true); var map_r = new UnweightedMap(n + 1, Array.ConvertAll(es, e => e.Reverse()), true); var r = map_r.Bfs(p.Last()); var(min, max) = (0, 0); for (int i = 0; i < k - 1; i++) { if (r[p[i]] <= r[p[i + 1]]) { min++; max++; } else { if (map[p[i]].Count(v => r[v] < r[p[i]]) > 1) { max++; } } } return($"{min} {max}"); }
static void Main() { var(n, m, s, t) = Read4(); var p = Read(); var map = GraphConsole.ReadUnweightedMap(n + 1, m, false); int x = p[s - 1], y = 0; var u = new bool[n + 1]; var q = PriorityQueue <int> .CreateWithKey(v => p[v - 1], true); u[s] = true; q.Push(s); while (q.Any) { var(v, pv) = q.Pop(); if (x > pv) { x = pv; y++; } foreach (var nv in map[v]) { if (u[nv]) { continue; } u[nv] = true; q.Push(nv); } } Console.WriteLine(y); }
static void Main() { var(h, w) = Read2(); var s = GraphConsole.ReadEnclosedGrid(ref h, ref w); var sv = (h - 2, w - 1); var ev = (1, 1); var r = ShortestPath.ForGrid(h, w) .ForWeightedMap(v => { var nes = new List <Edge <Point> >(); var uv = v - new Point(1, 0); var lv = v - new Point(0, 1); if (s.GetValue(uv) != '#') { nes.Add(new Edge <Point>(v, uv, s.GetValue(uv) == 'S' ? 0 : 1)); } if (s.GetValue(lv) != '#') { nes.Add(new Edge <Point>(v, lv, s.GetValue(lv) == 'E' ? 0 : 1)); } return(nes.ToArray()); }) .BfsMod(2, sv, ev); Console.WriteLine(r[ev]); }
static void Main() { var(h, w) = Read2(); var z = Read(); var sv = (z[0], z[1]); var ev = (z[2], z[3]); var s = GraphConsole.ReadEnclosedGrid(ref h, ref w); var r1 = ShortestPath.ForGrid(h, w) .ForUnweightedMap(v => { var nvs = (v.i + v.j) % 2 == 0 ? Nexts1(v) : Nexts2(v); return(Array.FindAll(nvs, nv => s.GetValue(nv) != '#')); }) .Bfs(sv, ev); var r2 = ShortestPath.ForGrid(h, w) .ForUnweightedMap(v => { var nvs = (v.i + v.j) % 2 != 0 ? Nexts1(v) : Nexts2(v); return(Array.FindAll(nvs, nv => s.GetValue(nv) != '#')); }) .Bfs(sv, ev); var m = Math.Min(r1[ev], r2[ev]); Console.WriteLine(m == long.MaxValue ? -1 : m); Point[] Nexts1(Point v) => new[] { new Point(v.i - 1, v.j), new Point(v.i + 1, v.j) }; Point[] Nexts2(Point v) => new[] { new Point(v.i, v.j - 1), new Point(v.i, v.j + 1) }; }
static void Main() { var(n, m) = Read2(); var map = GraphConsole.ReadUnweightedMap(n + 1, m, false); var r = map.Bfs(1); Console.WriteLine("Yes"); Console.WriteLine(string.Join("\n", r.RawInVertexes[2..]));
static object Solve() { var(n, m) = Read2(); var map = GraphConsole.ReadWeightedMap(n + 1, m, false); var r1 = map.Dijkstra(1); var r2 = map.Dijkstra(n); return(string.Join("\n", Enumerable.Range(1, n).Select(v => r1[v] + r2[v]))); }
static object Solve() { var(h, w) = Read2(); var sp = GraphConsole.ReadPoint(); var ep = GraphConsole.ReadPoint(); var s = GraphConsole.ReadEnclosedGrid(ref h, ref w); int ToId(Point p) => p.i * w + p.j; int ToId2(int i, int j) => i * w + j; Point FromId(int id) => new Point(id / w, id % w); var u_tate = new bool[h, w]; var u_yoko = new bool[h, w]; var r = ShortestPathCore.Bfs(h * w, pid => { var(pi, pj) = FromId(pid); var nexts = new List <int>(); if (!u_tate[pi, pj]) { u_tate[pi, pj] = true; for (int i = pi - 1; i >= 0 && s[i][pj] == '.'; i--) { u_tate[i, pj] = true; nexts.Add(ToId2(i, pj)); } for (int i = pi + 1; i < h && s[i][pj] == '.'; i++) { u_tate[i, pj] = true; nexts.Add(ToId2(i, pj)); } } if (!u_yoko[pi, pj]) { u_yoko[pi, pj] = true; for (int j = pj - 1; j >= 0 && s[pi][j] == '.'; j--) { u_yoko[pi, j] = true; nexts.Add(ToId2(pi, j)); } for (int j = pj + 1; j < w && s[pi][j] == '.'; j++) { u_yoko[pi, j] = true; nexts.Add(ToId2(pi, j)); } } return(nexts.ToArray()); }, ToId(sp), ToId(ep)); return(r[ToId(ep)] - 1); }
static void Main() { var(n, m) = Read2(); var map = GraphConsole.ReadWeightedMap(n + 1, m, true); var r = new long[n + 1]; for (int ev = 1; ev <= n; ev++) { var result = ShortestPathCore.Dijkstra(n + 1, v => v == 0 ? map[ev] : map[v], 0, ev); r[ev] = result.GetCost(ev); } Console.WriteLine(string.Join("\n", r[1..]));
static object Solve() { var(n, m) = Read2(); var map = GraphConsole.ReadUnweightedMap(n + 1, m, true); var r = 0; for (int v = 1; v <= n; v++) { var result = map.Bfs(v); r += result.RawCosts.Count(x => x != long.MaxValue); } return(r); }
static object Solve() { var(h, w) = Read2(); var a = GraphConsole.ReadIntGrid(h); var b = GraphConsole.ReadIntGrid(h - 1); Point sv = (0, 0); Point ev = (h - 1, w - 1); var r = ShortestPathCore.Dijkstra(h * 2, w, v => { var es = new List <Edge>(); if (v.i < h) { if (v.j < w - 1) { es.Add(new Edge(v, v + (0, 1), a[v]));
static void Main() { var(h, w) = Read2(); var s = GraphConsole.ReadEnclosedGrid(ref h, ref w); var sv = (h - 2, w - 1); var ev = (1, 1); var grid = ShortestPath.ForGrid(h, w); var dp = grid.CreateMap(int.MaxValue); dp[sv] = 0; var r = grid.ForUnweightedMap(v => { if (v.i == 0 || v.j == 0) { return(new Point[0]); } var lv = v - (0, 1); var uv = v - (1, 0); if (v.j == w - 1) { var nlv = dp[v] + (s.GetValue(lv) == 'E' ? 0 : 1); dp[lv] = Math.Min(dp[lv], nlv); return(new[] { lv }); } else { var nlv = dp[v] + (s.GetValue(lv) == 'E' ? 0 : 1); dp[lv] = Math.Min(dp[lv], nlv); var nuv = dp[v] + (s.GetValue(uv) == 'S' ? 0 : 1); dp[uv] = Math.Min(dp[uv], nuv); return(new[] { lv, uv }); } }).Bfs(sv, (-1, -1)); Console.WriteLine(dp[ev]); }
static void Main() { var(h, w) = (4, 4); var s = GraphConsole.ReadGrid(h); var rhw = Enumerable.Range(0, h * w).ToArray(); var toHash = GridHelper.CreateToHash(w); var fromHash = GridHelper.CreateFromHash(w); var sx = rhw .Where(i => s.GetValue(fromHash(i)) == '#') .Aggregate(0, (p, i) => p | (1 << i)); var map = rhw.Select(id => new List <int> { id }).ToArray(); for (int i = 0; i < h; i++) { for (int j = 1; j < w; j++) { map[toHash((i, j))].Add(toHash((i, j - 1)));
static void Main() { var(h, w) = Read2(); Point sv = Read2(); var s = GraphConsole.ReadEnclosedGrid(ref h, ref w); const string arrows = "v^><"; var spp = ShortestPath.ForGrid(h, w) .ForUnweightedMap(v => { var nvs = new List <Point>(); var nva = v.Nexts(); for (int k = 0; k < 4; k++) { var(i, j) = nva[k]; if (s[i][j] == '.' || s[i][j] == arrows[k]) { nvs.Add(nva[k]); } } return(nvs.ToArray()); }) .Bfs(sv, (-1, -1)); Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); for (int i = 1; i < h - 1; i++) { for (int j = 1; j < w - 1; j++) { Console.Write(s[i][j] == '#' ? '#' : spp.IsConnected((i, j)) ? 'o' : 'x'); } Console.WriteLine(); } Console.Out.Flush(); }
static bool Solve() { var(h, w) = Read2(); var s = GraphConsole.ReadGrid(h); var t = GraphConsole.ReadGrid(h); GridHelper.EncloseGrid(ref h, ref w, ref s, delta: 10); if (Matches()) { return(true); } t = GridHelper.RotateLeft(t); if (Matches()) { return(true); } t = GridHelper.RotateLeft(t); if (Matches()) { return(true); } t = GridHelper.RotateLeft(t); if (Matches()) { return(true); } return(false); bool Matches() { var(th, tw) = (t.Length, t[0].Length); for (int di = 0; di < h - th + 1; di++) { for (int dj = 0; dj < w - tw + 1; dj++) { if (Matches2(di, dj)) { return(true); } } } return(false); } bool Matches2(int di, int dj) { var(th, tw) = (t.Length, t[0].Length); for (int i = 0; i < th; i++) { for (int j = 0; j < tw; j++) { if (t[i][j] == '#' && s[i + di][j + dj] == '#') { return(false); } } } return(true); } }
public static void OpenConsole() { GraphConsole.ShowWindow(); }
static void Main() { var(h, w) = Read2(); var s = GraphConsole.ReadGrid(h); var k = s.Sum(l => l.Count(x => x == '#')); var map = new GridListMap <Point>(h, w); for (int i = 0; i < h; i++) { for (int j = 1; j < w; j++) { Point v = (i, j); Point nv = (i, j - 1); if (s.GetValue(v) == '#' && s.GetValue(nv) == '#') { map.Add(v, nv); map.Add(nv, v); } } } for (int j = 0; j < w; j++) { for (int i = 1; i < h; i++) { Point v = (i, j); Point nv = (i - 1, j); if (s.GetValue(v) == '#' && s.GetValue(nv) == '#') { map.Add(v, nv); map.Add(nv, v); } } } var q = new Stack <Point>(); var u = new GridMap <bool>(h, w, false); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (s[i][j] == '.') { continue; } q.Clear(); u = new GridMap <bool>(h, w, false); Dfs((i, j), (-1, -1)); } } void Dfs(Point v, Point pv) { q.Push(v); u[v] = true; if (q.Count == k) { Console.WriteLine(k); Console.WriteLine(string.Join("\n", q.Select(p => p + (1, 1)))); Environment.Exit(0); } foreach (var nv in map[v]) { if (nv == pv) { continue; } if (u[nv]) { continue; } Dfs(nv, v); } q.Pop(); u[v] = false; } }