[boj](s 3)3085キャンディゲーム


質問する


リンク


に答える


キャンディの位置と隣接するキャンディを交換しなければならないのは、徹底的な探求問題である.
完全に探索なので、草自体は簡単で、特に・・・
  • c++では、1つの文字列が1つの文字配列のように
  • にアクセスできます.
  • 右、下キャンディ交換位置の場合は、指定する大きさ以上の場合
  • を参照することに注意する.
  • の隣接するキャンディが同じキャンディである場合、次のコードのcount()のように1つずつ格を移動することができ、以前のキャンディと同時に++を加えるか、初期化する方法がより便利である.
    1、3日は新しい認識の事実です.

    コード#コード#

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    int N, sum, ans = 0;
    
    void count(string *candy)
    {
        for(int i=0;i<N;i++){
            sum=1;
            for(int j=1;j<N;j++){
                if (candy[i][j] == candy[i][j - 1])
                {
                    sum += 1;
                    if (sum > ans)
                        ans = sum;
                }
                else
                    sum = 1;
            }
        }
    
        for(int j=0;j<N;j++){
            sum = 1;
            for(int i=1;i<N;i++){
                if (candy[i][j] == candy[i - 1][j])
                {
                    sum += 1;
                    if (sum > ans)
                        ans = sum;
                }
                else
                    sum = 1;
            }
        }
    }
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);
    
        cin >> N;
    
        string candy[N];
    
        for (int i = 0; i < N; i++)
        {
            cin >> candy[i];
        }
    
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < N; j++)
            {
                if (j + 1 < N)
                {
                    // 오른쪽과 교환
                    swap(candy[i][j], candy[i][j + 1]);
    
                    count(candy);
    
                    // 원위치
                    swap(candy[i][j], candy[i][j + 1]);
                }
    
                if (i + 1 < N)
                {
                    // 아래쪽과 교환
                    swap(candy[i][j], candy[i + 1][j]);
    
                    count(candy);
    
                    // 원위치
                    swap(candy[i][j], candy[i + 1][j]);
                }
            }
        }
    
        cout << ans;
    }