【宽搜】XMU 1039 Treausure

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1039

题目大意

  给定n,m(1<=n,m<=1000),一张n*m的地图,求从X出发上下左右走能找到多少*(#为障碍,*为宝藏)。

题目思路:

  【搜索】

  找到出发点坐标,之后上下左右搜索即可,在过程中统计走到的宝藏数。

 1 //
 2 //by coolxxx
 3 //
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<string>
 7 #include<iomanip>
 8 #include<memory.h>
 9 #include<time.h>
10 #include<stdio.h>
11 #include<stdlib.h>
12 #include<string.h>
13 //#include<stdbool.h>
14 #include<math.h>
15 #define min(a,b) ((a)<(b)?(a):(b))
16 #define max(a,b) ((a)>(b)?(a):(b))
17 #define abs(a) ((a)>0?(a):(-(a)))
18 #define lowbit(a) (a&(-a))
19 #define sqr(a) ((a)*(a))
20 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
21 #define eps (1e-8)
22 #define J 10000000
23 #define MAX 0x7f7f7f7f
24 #define PI 3.1415926535897
25 #define N 1004
26 #define M 50004
27 using namespace std;
28 typedef long long LL;
29 int cas,cass;
30 int n,m,lll,ans;
31 int dx[]={-1,1,0,0};
32 int dy[]={0,0,-1,1};
33 int sx,sy;
34 int q[M][2];
35 char map[N][N];
36 bool u[N][N];
37 void spfa()
38 {
39     int i,j,x,y,xx,yy,h,t;
40     q[1][0]=sx;q[1][1]=sy;
41     h=0;t=1;u[sx][sy]=1;
42     while(h!=t)
43     {
44         if(++h==M)h=1;
45         x=q[h][0];y=q[h][1];
46         for(j=0;j<4;j++)
47         {
48             xx=x+dx[j];yy=y+dy[j];
49             if(map[xx][yy]==‘#‘ || u[xx][yy] || xx<1 || yy<1 || xx>n || yy>m)continue;
50             if(++t==M)t=1;
51             q[t][0]=xx;q[t][1]=yy;
52             u[xx][yy]=1;
53             if(map[xx][yy]==‘*‘)ans++;
54         }
55     }
56 }
57 int main()
58 {
59     #ifndef ONLINE_JUDGE
60 //    freopen("1.txt","r",stdin);
61 //    freopen("2.txt","w",stdout);
62     #endif
63     int i,j;
64 //    for(scanf("%d",&cas);cas;cas--)
65 //    for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
66 //    while(~scanf("%s",s))
67     while(~scanf("%d",&n))
68     {
69         ans=0;
70         memset(u,0,sizeof(u));
71         scanf("%d",&m);
72         for(i=1;i<=n;i++)
73             scanf("%s",map[i]+1);
74         for(i=1;i<=n;i++)
75             for(j=1;j<=m;j++)
76                 if(map[i][j]==‘X‘){sx=i;sy=j;break;}
77         spfa();
78         printf("%d\n",ans);
79     }
80     return 0;
81 }
82 /*
83 //
84
85 //
86 */

千万不要点

时间: 2024-11-08 10:30:19

【宽搜】XMU 1039 Treausure的相关文章

POJ 2251宽搜、

因为这个题做了两次犯了两次不同的错误. 第一次用的dfs死活都超时 第二次把定义队列定义在了全局变量的位置,导致连WA了几次.最后找到原因的我真的想一巴掌拍死自己 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 using namespace std; 5 const int qq=40; 6 int vis[qq][qq][qq]; 7 char map[qq][qq][qq]; 8 int tz,

宽搜--knight moves hdu1372

写出来之后觉得是一道简单的宽搜题,但是之前写的时候遇到很多细节处理的小问题.刚刚开始,还需要更加努力. 首先是题目意思,骑士移动原来是走日字,智商捉急. 其次是方向处理问题,之前一直没转过弯.普遍方向表达有两种 第一种: int h[8][2]={{-2,-1},{-2,1},{-1,2},{-1,-2},{1,-2},{1,2},{2,-1},{2,1}}; for(int i=0;i<8;i++){ next.a=head.a+h[i][0]; next.b=head.b+h[i][1];

【NOIP2016提高组】愤怒的小鸟(状压宽搜)

题目描述 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如的曲线,其中a,b是Kiana指定的参数,且必须满足a<0. 当小鸟落回地面(即x轴)时,它就会瞬间消失. 在游戏的某个关卡里,平面的第一象限中有n只绿色的小猪,其中第i只小猪所在的坐标为(xi,yi). 如果某只小鸟的飞行轨迹经过了(xi,yi),那么第i只小猪就会被消灭掉,同时小鸟将会沿着原先

【图论】【宽搜】【染色】NCPC 2014 A Ades

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1787 题目大意: N个点M条无向边(N,M<=200000),一个节点只能有一个标记.每条边有一个值{0,1或2}表示这条边连接的两个节点拥有的标记之和.问只要要多少个标记才能满足,无解impossible. 题目思路: [图论][宽搜] 因为每个点只能有或没有标记.所以可以枚举每个联通块的其中一个点有还是没有标记,用这个点去拓展这个点的联通块并01染色(这个点所能到达的所有点) 初

poj1399 hoj1037 Direct Visibility 题解 (宽搜)

http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minecraft方块地图上(由很多1*1*1的方块搭起来的地图,最高5000),其中两块分别有高0.5米的激光塔,有一个高0.5米的机器人要从其中一个激光塔走到另一个.要求只能走相邻4个方向,每次不能爬上超过1格或跳下超过3格(咦,好像真的很像minecraft),要求每走到一个格子,机器人站在在这个格子的

【宽搜】ECNA 2015 D Rings (Codeforces GYM 100825)

题目链接: http://codeforces.com/gym/100825 题目大意: 给你一张N*N(N<=100)的图表示一个树桩,'T'为年轮,'.'为空,求每个'T'属于哪一圈年轮,空的为'.',如果最内圈<10,每个格子用两位表示,否则用三位,不足的用'.'补足. 题目思路: [宽搜] 初始所有点标记为INF,先将图上所有的'.'标记为0,边缘如果有'T'记为1,并把'.'和边缘所有的点加入队列,接下来一个一个上下左右扩展并更新答案,没进队的进队.最后输出. 1 // 2 //by

BZOJ_1615_[Usaco2008_Mar]_The Loathesome_Hay Baler_麻烦的干草打包机_(模拟+宽搜/深搜)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1615 一个主动轮带着一些轮子转,轮子带着轮子转,轮子带着轮子转...一个非主动轮只会被一个轮子带着转.求从主动轮到某一个轮子的路上所有轮子的转速的绝对值之和. 分析 从起点开始,枚举相接触的轮子,只要不是之前路上的(带着当前轮子转的)轮子,就继续往下走.宽搜深搜都可以. 注意: 1.%.0lf是会四舍五入的!所以要强制转化成int. 宽搜: 1 #include <bits/stdc++.h

[NOIP2002] 字串变换 宽搜+深度优化

这道题硬是让我用STL水过.......而且题解里说的什么双向宽搜,交替扩展............... 这道题反正,STL用就用吧,但是状态数可以卡到千亿级别,因为这个东西是阶乘扩展的,然后我们发现他的深度会极大地影响状态数,然而如果我们把深度缩小为0.5倍,那么他的状态数也就是百万级别的,所以我们可以多源搜索来进行深度优化. 由此可见多源搜索是一个方式,深度优化是一种十分有效的优化. #include <map> #include <cstdio> #include <

【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105),每个点有两个值ai,bi(ai,bi<=109),count(i,j)表示从i走到j的方案数. 求mod 109+7的值. 题目思路: [拓扑][宽搜] 首先将式子拆开,每个点I走到点J的d[j]一次就加上一次ai,这样一个点被i走到的几次就加上几次ai,相当于count(i,j)*ai,最终只要求