zoukankan      html  css  js  c++  java
  • [DFS] [洛古] P1101 单词方阵

    写出来出现一大堆“yizhong”

    一看是想复杂了

    只用沿着一个方向dfs就行

    用循环可以简化程序

    #include <iostream>
    using namespace std;
    
    const int MAXN = 1e2 + 5;
    
    string mode = "yizhong";
    
    int ans[MAXN][MAXN] = {0};
    
    int move[8][2] = { {-1,-1}, {-1,0} , {-1,1}, {0,-1}, {0,1} , {1,-1} ,{1,0}, {1,1}};
    
    char txt[MAXN][MAXN];
    
    int N, tf = 0;
    
    int pos[7][2];
    
    void init()
    {
    	for(int i = 0; i < 7; i++)
    	{
    		ans[ pos[i][0] ][ pos[i][1] ] = 1;
    	}
    }
    
    void dfs(int x, int y, int rit, int dir)
    {
    	pos[rit][0] = x;
    	pos[rit][1] = y;
    	
    	if(rit == 6)
    	{
    		init();
    		return ;
    	}
    	
    	int tx, ty;
    	
    	tx = x + move[dir][0];
    	ty = y + move[dir][1];
    	
    	if(tx >= 0 && tx < N && ty >= 0 && ty < N && txt[tx][ty] == mode[rit + 1])
    	{
    		dfs(tx, ty, rit + 1, dir);
    	}
    }
    
    int main()
    {
    	cin>>N;
    	
    	for(int i = 0; i < N; i++)
    		for(int j = 0; j < N; j++)
    			cin>>txt[i][j];
    	
    	for(int i = 0; i < N; i++)
    	{ 
    		for(int j = 0; j < N; j++)		
    		{
    			if(txt[i][j] == 'y')
    			{
    				for(int k = 0; k < 8; k++)
    				{
    					dfs(i, j, 0, k);
    				}
    			}
    					
    		} 
    	} 
    	
    	for(int i = 0; i < N; i++)
    	{
    		for(int j = 0; j < N; j++)
    		{
    			if(ans[i][j] == 1)
    				cout<<txt[i][j];
    			else
    				cout<<'*';
    		}
    			
    		cout<<endl;
    	}
    	return 0;
    } 

    DFS(深度优先搜索)

  • 相关阅读:
    架构阅读笔记4
    python读取docx内容
    python转换doc为docx
    使用Navicat连接oracle问题及解决
    扩充虚拟机磁盘
    虚拟机无法打开内核
    六个常见属性场景
    架构阅读笔记3
    架构学习
    PHP中的加密方式有如下几种
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270582.html
Copyright © 2011-2022 走看看