タイトル説明
6x6の正方形、グリッドのエッジに沿った2つの部分に切断。これは、2つの部分の同じ形状を必要とします。図セグメンテーション方法が可能です。
計算は:法律、異なるセグメントの合計数を含むこの3点が挙げられます。注:同一の分割方法に属し回転対称。
計算は:法律、異なるセグメントの合計数を含むこの3点が挙げられます。注:同一の分割方法に属し回転対称。
輸出
出力は、整数の答えを表し、
ソリューション:
観察知ることができ、境界線上の点は、点(3,3)であることは対称であるので、パターンの4つの方向に、その点から検索を開始
縦方向が対称であるので、検索は計算を繰り返した場合。同様に、左右方向は、最終的な結果は、4で割られます
回答:509
書式#include <iostreamの> の#include <キュー> の#include <アルゴリズム> 書式#include < セット > の#include < 文字列の.h> 使用して 名前空間はstdを、 INTの DIR [ 4 ] [ 2 ] = {{ 0、1 }、{ 0、 - 1 }、{ 1、0 }、{ - 1、0 }}。 INTネジ[ 10 ] [ 10 ]。 INT年= 0 ; ボイド DFS(int型のx、int型のY) { IF(X == 0 || Y == 0 || == X 6 || Y == 6)// 検索境界位置 { ANS ++ ; リターン; } 以下のために(INT iが= 0 ; I < 4 ; I ++ ) { あなた X1 = X + DIR [I] [ 0 ]; あなたは、Y1 = Y + dirを[I] [ 1 ]; int型 X2 = 6。 - X1; // 対称方向 int型 Y2 = 6。 - Y1; もし(X1> = 0 && Y1> = 0 && X1 <= 6 && Y1 <= 6 ) { IF(!VIS [X1] [Y1])// 点対称であり、決意をすることができます { ビュー[X1] [Y 1] =表示[X2]、[Y 2] = 1 ; DFS(X1、Y1); VIS [X1] [Y1] = VIS [X2] [Y2] = 0 ; // バック } } } } INT メイン(){ memsetの(VIS、0、はsizeof (VIS))。 VIS [ 3 ] [ 3 ] = 1 。 DFS(3、3 )。 printf(「%D \ N- 」、ANS / 4); // 垂直方向が対称である計算横方向は同様に、最終的な結果は4で割ったとき、検索が繰り返されます リターン 0 ; }