DFS

 DFS

  1.  格子分割

    描述:6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。问有多少种方法(旋转的方法算同一种)

     关键词:dfs深搜,对称图形,分割

 

 

    思路:根据分割线的对称性,所以从中心点开始回溯+深搜,并且双向标记

    

class One{
    int N=6;
    public void teet(){
//        初始化
        int vis[][]=new int[N+1][N+1];
        vis[3][3]=1;
        dfs(3,3,vis);
        System.out.println(ans/4);
    }
    int ans=0;
    int [][]dir={{0,1},{0,-1},{-1,0},{1,0}};
    public void dfs(int x,int y,int [][]vis){
        if(x==0||y==0||x==N||y==N){
            ans++;
            return;
        }
        
        for(int i=0;i<4;i++){
            if(vis[x+dir[i][0]][y+dir[i][1]]==0){
                vis[x+dir[i][0]][y+dir[i][1]]=1;
                vis[N-(x+dir[i][0])][N-(y+dir[i][1])]=1;
                dfs(x+dir[i][0],y+dir[i][1],vis);
                vis[x+dir[i][0]][y+dir[i][1]]=0;
                vis[N-(x+dir[i][0])][N-(y+dir[i][1])]=0;
            }
            
        }
    }
    
}

 

 

 

 

          

posted @ 2017-05-09 00:17  琴酒一  阅读(174)  评论(0)    收藏  举报