前提・実現したいこと
ここに質問の内容を詳しく書いてください。
C#でスタックに要素数2の整数リストをプッシュしContainsで要素が含まれているかどうか
判別する時、既に含まれているリストを含まれていると判別してしまう
発生している問題・エラーメッセージ
スタックにリストをプッシュする時Containsでうまく判別できない
### 該当のソースコード using System; using System.Collections; using System.Collections.Generic; using System.Linq; using static System.Console; public class Hello{ public static int[] dx = {-1,0,1,0}; public static int[] dy = {0,1,0,-1}; public static int N; public static char[][] map; public static string str; public static bool dfs(Stack visited, int y, int x, int count){ if(count==str.Length){ return true; }else{ for(int i=0; i<4; i++){ int ny = y + dy[i]; int nx = x + dx[i]; List<int> next = new List<int>{ny, nx}; if(nx<0 || nx>=N || ny<0 || ny>=N){ continue; }else if(map[ny][nx]==str[count] && !visited.Contains(next)){ visited.Push(next); count+=1; if(dfs(visited, ny, nx, count)){ return true; }else{ count-=1; visited.Pop(); } } } return false; } } public static void Main(){ // Your code here! N = int.Parse(Console.ReadLine()); map = new char[N][]; for(int i=0; i<N; i++){ map[i]=Console.ReadLine().ToCharArray(); } int M = int.Parse(Console.ReadLine()); for(int i=0; i<M; i++){ str=Console.ReadLine(); bool writable = false; var visited = new Stack(); for(int j=0; j<N; j++){ for(int k=0; k<N; k++){ if(str[0]==map[j][k]){ List<int> next = new List<int>{j, k}; visited.Push(next); int count=1; if(dfs(visited,j,k,count)){ System.Console.WriteLine("yes"); writable=true; break; }else{ count-=1; visited.Pop(); } } } if(writable){ break; } } if(!writable){ System.Console.WriteLine("no"); } } } } ```ここに言語名を入力 C# ソースコード
試したこと
Visual Studio でデバッグした所 !visited.Contains(next) の部分で
visitedに含まれているnextが条件を通過してしまう
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー