题解 P1101 【单词方阵】

先上满分代码:

#include<iostream>
#include<cstdio>
using namespace std;
char a[100][100];//存储输入用数组
int b[100][100];//染色用数组
int ax[8]={1,1,0,-1,-1,-1,0,1};
int ay[8]={0,1,1,1,0,-1,-1,-1};
//八向搜索用
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>a[i][j];
        //以上是输入
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			if(a[i][j]=='y')
			for(int m=0;m<8;m++)//向八个方向搜索
			{
				int tmp_i=i,tmp_j=j;//这里新弄一个变量,放置原来的变量i、j在之后的操作中变化。
				if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='i')
				{
					tmp_i+=ax[m];tmp_j+=ay[m];
					if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='z')
					{
						tmp_i+=ax[m];tmp_j+=ay[m];
						if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='h')
						{
							tmp_i+=ax[m];tmp_j+=ay[m];
							if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='o')
							{
								tmp_i+=ax[m];tmp_j+=ay[m];
								if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='n')
								{	
									tmp_i+=ax[m];tmp_j+=ay[m];
									if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='g')
									{
										b[tmp_i+ax[m]][tmp_j+ay[m]]=1;//染色										b[tmp_i][tmp_j]=1;//染色
										for(int v=0;v<5;v++)
										{
											tmp_i-=ax[m];tmp_j-=ay[m];
											b[tmp_i][tmp_j]=1;
										}
									}
								}
							}
						}
					}
				}
			}
		}
        //简单易懂的输出部分
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			if(b[i][j]) cout<<a[i][j];
			else cout<<'*';
		cout<<endl;
	}
}

原理:
先找y,然后把后面的i、z、h、o、n、g全找了,成片的if判断下就够了。
找完了以后染色。b数组就是为了染色而开的。

我可能没有用到深搜思想qwq

好像也没什么能扯的了……

向大佬们致敬

题目地址:https://www.luogu.com.cn/problem/P1101

洛谷那边不让交题解,果然是这题太简单了了嘛……

posted @ 2020-02-07 03:45  東雲寺貍  阅读(135)  评论(0编辑  收藏  举报