hdu 1175 其实真的可以不用搜索!!

原创 2012年03月31日 00:55:29
#include <iostream>
#include <cstdio>

using namespace std;

int n,m,p;
int map[1002][1002];
int dist[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int narrow[1002][1002];

bool solve(int x,int y,int xx,int yy)
{
	if(map[xx][yy]!=map[x][y]) return false;
	if(map[x][y]==0) return false;
	if(x==xx&&y==yy) return false;
     
	for(int i=0;i<4;i++)
	{
		int a=x+dist[i][0];
		int b=y+dist[i][1];
		if(a==xx&&yy==b) return true;
	}
	memset(narrow,0,sizeof(narrow));

	for(int i=y+1;i<=m&&map[x][i]==0;i++)
	{
         narrow[x][i]=1;
		 for(int j=x+1;j<=n&&map[j][i]==0;j++)
			 narrow[j][i]=1;
		 for(int j=x-1;j>=0&&map[j][i]==0;j--)
			 narrow[j][i]=1;
	}
 
	for(int i=y-1;i>0&&map[x][i]==0;i--)
	{
         narrow[x][i]=1;
		 for(int j=x+1;j<=n&&map[j][i]==0;j++)
			narrow[j][i]=1;
		 for(int j=x-1;j>=0&&map[j][i]==0;j--)
			narrow[j][i]=1;
	}   
	for(int i=x-1;i>0&&map[i][y]==0;i--)
	{
         narrow[i][y]=1;
		 for(int j=y+1;j<=m&&map[i][j]==0;j++)
			 narrow[i][j]=1;
		 for(int j=x-1;j>=0&&map[i][j]==0;j--)
			 narrow[i][j]=1;
	}
	for(int i=x+1;i<=n&&map[i][y]==0;i++)
	{
         narrow[i][y]=1;
		 for(int j=y+1;j<=m&&map[i][j]==0;j++)
			 narrow[i][j]=1;
		 for(int j=x-1;j>=0&&map[i][j]==0;j--)
			 narrow[i][j]=1;
	}   

	for(int i=yy+1;i<=m&&map[xx][i]==0;i++)
		if(narrow[xx][i]) return true;
	for(int i=yy-1;i>0&&map[xx][i]==0;i--)
		if(narrow[xx][i]) return true;
    for(int i=xx-1;i>0&&map[i][yy]==0;i--)
		if(narrow[i][yy]) return true;
	for(int i=xx+1;i<=n&&map[i][yy]==0;i++)
		if(narrow[i][yy]) return true;
	return false;

}


int main()
{
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		if(n==0&&m==0) break;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				scanf("%d",&map[i][j]);

		scanf("%d",&p);

		for(int i=0;i<p;i++)
		{
			int x,y,xx,yy;
			scanf("%d%d%d%d",&x,&y,&xx,&yy);
			if(solve(x,y,xx,yy)) puts("YES");
			else puts("NO");
		}
	}
	return 0;
	
}

hdu1175(dfs+剪枝)

http://acm.split.hdu.edu.cn/showproblem.php?pid=1175连连看Time Limit: 20000/10000 MS (Java/Others)    M...
  • weixin_36571742
  • weixin_36571742
  • 2017年05月05日 16:40
  • 297

hdu1175

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su...
  • u011919301
  • u011919301
  • 2014年05月01日 23:15
  • 342

编写你的shell其实很简单

写你的shell,其实很简单.没有写过shell? 没关系了,其实需求确定之后,你显然已经知道,这太简单了,需要的朋友可以参考下 引语:我本人以前并没有写过shell脚本,也许是...
  • yongzhen150
  • yongzhen150
  • 2017年04月01日 09:01
  • 200

HDU 1175 连连看 (搜索 DFS)

题意很简单,就是我们平时玩的连连看的游戏规则,刚开始用的广搜,刚开始的剪枝不高效导致爆掉队列,使得内存超限,后来发现,bfs先遍历的点不一定是弯数少的点,这样的话如果不专门来更新的话,就会出现运行结果...
  • IAccepted
  • IAccepted
  • 2014年04月18日 15:51
  • 4246

HDU 1175 连连看(搜索)

连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su...
  • qq_34374664
  • qq_34374664
  • 2016年10月31日 18:34
  • 433

hdu1175 连连看 (BFS+优先队列)

Problem Description “连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能...
  • hndu__lz
  • hndu__lz
  • 2016年07月24日 11:03
  • 127

HDU 1175(搜索DFS)

#include #include #include using namespace std; int ss[1005][1005]; int vis[1005][1005]; int dir[...
  • Below_Crusder
  • Below_Crusder
  • 2016年05月14日 16:54
  • 157

hdu 1175 连连看(搜索)

上周实验课上学妹问我的题目,当时我顺手写了个shensou
  • zizaimengzhongyue
  • zizaimengzhongyue
  • 2014年04月09日 12:33
  • 468

其实真的可以这样来过

人有时迷失,有时茫然,但是有一种人,只要坚定了目标,就一定会做到,不管周围人怎么看,一定会达到,孝敬父母,怀有一颗感恩的心。做最好的自己!                               ...
  • NO_WONDER
  • NO_WONDER
  • 2011年06月02日 21:55
  • 240

其实可以不用那么c++

所谓编程语言本质也是一门语言,目的是表达自己的思想,虽然目标是机器而不是人,但是相信我,会真正看语言本身的终究还是人。所谓优雅的代码就是严谨的表达出自己的思想,并且易于维护的。如果你写一篇文章满是之乎...
  • langresser
  • langresser
  • 2013年09月30日 22:18
  • 1719
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 1175 其实真的可以不用搜索!!
举报原因:
原因补充:

(最多只允许输入30个字)