2727:仙岛求药

  • 查看
  • 提交
  • 统计
  • 提问

说到底时间限制:
1000ms

内存限制:
65536kB

描述
少年李逍遥的婶婶病了,王小虎介绍他去划一度仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来至岛的中坚,发现仙药摆在了迷阵的奥。迷阵由M×N个方格组成,有的方格内产生可瞬秒李逍遥的妖魔,而有方格内虽然是安全。现在李逍遥想尽快找到仙药,显然他承诺避开有好东西的方格,并经极其少之方格,而且那里会有潜在人物等在他。现在求您来救助他促成这个目标。
下图 显示了一个迷阵的样例及李逍遥找到仙药的路线.
统计 1

输入
输入有差不多组测试数据. 每组测试数据以半单不零整频繁 M 和 N
开始,两者都不高于20。M 表示迷阵行数, N 表示迷阵列数。接下来有 M 行,
每行包含N个字符,不同字符分别表示不与含义:
1) ‘@’:少年李逍遥所在的职;
2) ‘.’:可以安全交通的方格;
3) ‘#’:有老东西的方格;
4) ‘*’:仙药所在位置。
当以一行中读入的是少单零时,表示输入了。

输出
于每组测试数据,分别出口一行,该行包含李逍遥找到仙药需要通过的无限少之方格数目(计数包括初步位置的四方)。如果他莫容许找到仙药,
则输出 -1。

样例输入
8 8
.@##…#

#....#.#
#.#.##..
..#.###.
#.#...#.
..###.#.
...#.*..
.#...###
6 5
.*.#.
.#...
..##.
.....
.#...
....@
9 6
.#..#. 
.#.*.# 
.####. 
..#... 
..#... 
..#... 
..#... 
#.@.## 
.#..#. 
0 0

样例输出
10
8
-1

bfs裸题,注意每组数据之间的衔接

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 using namespace std;
 6 int bgx,bgy,edx,edy;
 7 const int MAXN=1001;
 8 int map[MAXN][MAXN];
 9 bool vis[MAXN][MAXN];
10 int xx[6]={-1,+1,0,0};
11 int yy[6]={0,0,-1,+1};
12 int n,m;
13 struct node
14 {
15     int x;
16     int y;
17     int step;
18 }cur,nxt;
19 queue<node>q;
20 void bfs(int x,int y)
21 {
22     while(q.size()!=0)q.pop();
23     cur.x=x;    cur.y=y;    cur.step=0;
24     q.push(cur);
25     vis[x][y]=1;
26     int flag=0;
27     while(q.size()!=0)
28     {
29         node p=q.front();
30         q.pop();
31         for(int i=0;i<4;i++)
32         {
33             int wx=p.x+xx[i];
34             int wy=p.y+yy[i];
35             if(wx>=1&&wx<=n&&wy>=1&&wy<=m&&vis[wx][wy]==0&&map[wx][wy]!=1)
36             {
37                 if(map[wx][wy]==2)
38                 {
39                     printf("%d\n",p.step+1);
40                     flag=1;
41                     break;
42                 }
43                 else
44                 {
45                     nxt.x=wx;
46                     nxt.y=wy;
47                     nxt.step=p.step+1;
48                     q.push(nxt);
49                     vis[wx][wy]=1;
50                 }
51             }
52         }
53         if(flag==1)break;
54     }
55     if(flag==0)
56     printf("-1\n");
57 }
58 int main()
59 {
60     while(scanf("%d%d",&n,&m))
61     {
62         memset(map,0,sizeof(map));
63         memset(vis,0,sizeof(vis));
64         if(n==0&&m==0)break;
65         for(int i=1;i<=n;i++)
66         {
67             for(int j=1;j<=m;j++)
68             {
69                 char c;
70                 cin>>c;
71                 if(c=='@')     {bgx=i;bgy=j;map[i][j]=1;}
72                 if(c=='*')    {edx=i;edy=j;map[i][j]=2;}
73                 if(c=='#')     {map[i][j]=1;}
74                 if(c=='.')     {map[i][j]=0;}
75             }
76         }
77         bfs(bgx,bgy);
78     }
79     return 0;
80 }

 

于SQL server中对数据库的操作:

删除表:
drop table 表名
修改表:
alter table 表名 添加列add 列名 列类型
alter table 表名 drop column 列名

抹数据库
drop database 数据库名

CRUD操作
C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete
删除数据

1.添加数
insert into 表名 values(‘第一排值’,’第二列值’)——数据库中因故单引号
每一样排列都如增长

率先种办法:

insert into 表名
values(‘第一排列值’,”)——若第二排列非思量补加要写,可用引号为空

老二栽办法:

被同样排上加:insert into Nation(列名) values(‘列值’)

让多排列长,在列名后就此“,”隔开——(列,列)

如若用于增长

SQL server中:不用失去管第一排于第二排始发

My SQL 中需管第一列于增长列

2.刨除数据

delete from 表名—— 删除所有数据

delete from 表名 where ids=5——删除ids=5的数据

3.改动数据

update 表名 set fcode=’p016′ 修改所有的fcode值为p016

update 表名 set fcode=’p016′ where ids=6

改多排
update 表名 set fcode=”,mcode=” where ids= 列与列用逗号隔开

字符串+”,
布尔型’true’或’false’,0 false或1 true 
日子型’1999-2-3’+单引号,中以格式,
整形

查询:
1.略询问
select * from 表名 ——查有数据
select 列名,列名 from 表名——查指定列的数
安别名 select 列名 as ‘别名’ ,列名 as ‘别名’ from 表名

2.法查询

select * from 表名 where 列名=’数据’

select * from 表名 where 列名=’数据’ and 列名=’数据’
select * from 表名 where 列名=’数据’ or 列名=’数据’——多规格查询

3.限查询
汽车举例:
select * from 表名 where 列名(Price)>40 and 列名(Price)<50

select * from 表名 where Price between 40 and 50

4.离散查询

select * from 表名 where 列名 in (‘c001′,’c005′,’c010′,’c015’)
select * from 表名 where 列名 not in (‘c001′,’c005′,’c010′,’c015’)
——反选

5.歪曲查询
因汽车表为条例:
select * from 表名 where 列名 like ‘%宝马%’
select * from 表名 where 列名 like ‘宝马%’——查询以宝马开头的
select * from 表名 where 列名 like ‘%宝马’——查询以宝马结尾的
select * from 表名 where 列名 like ‘宝马’——查等宝马的

_代表一个字符
select * from 表名 where 列名 like ‘__E%’——查第三独字符是E的
% 代表是不管三七二十一多单字符

6.排序查询

select * from 表名 order by 列名 ——默认升序asc
select * from 表名 order by 列名 desc ——降序排列

select * from 表名 order by 列名 desc,列名
asc——以稀单字段排序,前面主要原则,后面次要条件

7.分页查询

select top 5(每页显示几乎条) * from 表名 where 列名 not in (select top
5 列名 from 表名)

现阶段页:page = 2; 每页显示:row = 10;
select top row(每页显示几乎长长的) * from 表名 where 列名 not in (select
top (page-1)*row 列名 from 表名)

8.夺又查询

select distinct 列名 from 表名

9.分组查询

select Brand(列名) from 表名 group by Brand(列名)
having(在分组中加条件,有得来group by) count(*)>2

10.聚合函数 (又为统计查询)

select count(*) from 表名 ——查询出来的数量条数

select count(主键列) from 表名 ——查询出来的享有数据条数

select sum(Price) from Car——求和
select avg(Price) from Car——求平均
select max(Price) from Car——求最大
select min(Price) from Car——求最小

首要字不分轻重缓急写