A -Dragon Maze

Time Limit: 2000/1000MS (Java/Others)Memory Limit:
128000/64000KB (Java/Others)

题目连接:    
传送门

Problem Description

You are the prince of Dragon Kingdom and your kingdom is in danger of running out of power. You must find power to save your kingdom and its people. An old legend states that power comes from a place known as Dragon Maze. Dragon Maze appears randomly out
of nowhere without notice and suddenly disappears without warning. You know where Dragon Maze is now, so it is important you retrieve some power before it disappears.

Dragon Maze is a rectangular maze, an N×M grid of cells. The top left corner cell of the maze is(0, 0) and the bottom right corner is (N-1, M-1). Each cell making up the maze can be either a dangerous place which you never escape
after entering, or a safe place that contains a certain amount of power. The power in a safe cell is automatically gathered once you enter that cell, and can only be gathered once. Starting from a cell, you can walk up/down/left/right to adjacent cells with
a single step.

Now you know where the entrance and exit cells are, that they are different, and that they are both safe cells. In order to get out of Dragon Maze before it disappears,you must walk from the entrance cell to the exit cell taking as few steps as possible.

If there are multiple choices for the path you could take, you must choose the one on which you collect as much power as possible in order to save your kingdom.

Input

The first line of the input gives the number of test cases, T(1 ≤ T ≤ 30).T test cases follow.

Each test case starts with a line containing two integers N and M(1 ≤ N, M ≤ 100), which give the size of Dragon Maze as described above.

The second line of each test case contains four integers enx, eny, exx, exy(0 ≤ enx, exx < N, 0 ≤ eny, exy < M), describing the position of entrance cell(enx,
eny)
and exit cell (exx, exy).

Then N lines follow and each line has M numbers, separated by spaces, describing theN×M cells of Dragon Maze from top to bottom.

Each number for a cell is either -1, which indicates a cell is dangerous, or a positive integer, which indicates a safe cell containing a certain amount of power.

Output

For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1).

If it's possible for you to walk from the entrance to the exit, y should be the maximum total amount of power you can collect by taking the fewest steps possible.

If you cannot walk from the entrance to the exit, y should be the string "Mission Impossible." (quotes for clarity).

Sample Input

2
2 3
0 2 1 0
2 -1 5
3 -1 6
4 4
0 2 3 2
-1 1 1 2
1 1 1 1
2 -1 -1 1
1 1 1 1

Sample Output

Case #1: Mission Impossible.
Case #2: 7 意解: 一个简单的BFS加优先队列,dfs也能够做,毕竟数据非常小. AC代码:
/*
* this code is made by eagle
* Problem: 1191
* Verdict: Accepted
* Submission Date: 2014-09-19 01:46:08
* Time: 72MS
* Memory: 1736KB
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue> using namespace std;
int N,M,ux,uy,nx,ny;
int map[110][110];
int d[][2] = {-1,0,1,0,0,1,0,-1}; struct Node
{
int x,y,num,t;
//Node (int x, int y, int num) : x(x),y(y),num(num) {}
bool operator < (const Node &cnt) const
{
return cnt.t < t || (cnt.num > num && cnt.t == t);
}
}; bool query()
{
Node a;
priority_queue<Node>ms;
a.x = ux;
a.y = uy;
a.num = map[ux][uy];
a.t = 0;
ms.push(a);
while(!ms.empty())
{
a = ms.top();
ms.pop();
// cout<<a.x<<":"<<a.y<<endl;
if(a.x == nx && a.y == ny)
{
printf("%d\n",a.num);
return true;
}
for(int i = 0; i < 4; i++)
{
Node b;
b.x = a.x + d[i][0];
b.y = a.y + d[i][1];
if(b.x < 0 || b.y < 0 || b.x >= N || b.y >= M || map[b.x][b.y] == -1) continue;
b.num = a.num + map[b.x][b.y];
b.t = a.t + 1;
ms.push(b);
map[b.x][b.y] = -1;
}
}
return false;
} int main()
{
//freopen("in.txt","r",stdin);
int T,cnt = 0;
scanf("%d",&T);
while(T--)
{
printf("Case #%d: ",++cnt);
scanf("%d %d",&N,&M);
scanf("%d %d %d %d",&ux,&uy,&nx,&ny);
for(int i = 0; i < N; i++)
for(int j = 0; j < M; j++)
scanf("%d",&map[i][j]);
if(!query())
puts("Mission Impossible.");
}
return 0;
}

D - qj的招待会

Time Limit: 100/50MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)

Problem Description

最终,qj不负众望的拿到了爱情。
可是其它村子的人都不相信这个注定孤独一生的孩子竟然会拥有爱情。于是都决定到qj所在的村子里去看看是否真的如此。
这时,qj为了(xiu)招(en)待(ai),他就必须得知道他们最早什么时候到。而且是哪个村子的。
qj所在的村子会用'Z'来代表,其它人的村子被标记为'a'..'z'和'A'..'Y',在用大写字母表示的村子中有人,小写字母中则没有。
为了使问题简单化,设定这些人每分钟走1km(喂喂,这可能吗。!!)
他如今非常忙,正在和爱情约会中,所以请各位帮帮qj算算吧。

Input

第一行 N表示道路数量(1<= N<=10000),

第2-N+1行 用空格隔开的两个字母和整数代表道路连接的村子与道路的长度(km)(1<=长度<=1000)

Output

输出:最先到达qj村子的村民所在的村子的标记,和这村民须要的时间(min)。

Sample Input

5
A d 6
B d 3
C e 9
d Z 8
e Z 3

Sample Output

B 11

意解: 这是一个简单的floyd最短路算法,仅仅须要给每一个村庄表上号,以A-z标为1到64,然后就是一个模板题了.

AC代码:
/*
* this code is made by eagle
* Problem: 1209
* Verdict: Accepted
* Submission Date: 2014-09-20 10:58:32
* Time: 12MS
* Memory: 1716KB
*/
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std;
const int INF = 1e8;
int map[100][100]; void unit()
{
for(int i = 1; i <= 100; i++)
for(int j = 1; j <= 100; j++)
if(i != j) map[i][j] = INF;
else map[i][j] = 0;
} int main()
{
//freopen("in","r",stdin);
int T;
cin>>T;
getchar();
unit();
while(T--)
{
char c1,c2;
int x,a,b;
scanf("%c %c %d",&c1,&c2,&x);
getchar(); if(c1 > c2) swap(c1,c2); if(c1 > 'Z') a = c1 - 'a' + 27;
else a = c1 - 'A' + 1; if(c2 > 'Z') b = c2 - 'a' + 27;
else b = c2 - 'A' + 1; if(x < map[a][b]) map[a][b] = map[b][a] = x;
}
for(int k = 1; k <= 70; k++)
for(int j = 1; j <= 70; j++)
for(int i = 1; i <= 70; i++)
if(map[j][k] == INF || map[k][i] == INF) continue;
else map[j][i] = min(map[j][i] , map[j][k] + map[k][i]);
int ans = INF;
char t;
for(int i = 1; i < 26; i++)
if(map[i][26] < ans)
{
t = (char)(i + 'A' - 1);
ans = map[i][26];
}
printf("%c %d\n",t,ans);
return 0;
}

最新文章

  1. MS SQL 错误 :17883,严重度: 1,状态: 0
  2. Azure Management API 之 利用 Windows Azure Management Libraries 来控制Azure platform
  3. [转]概率基础和R语言
  4. Popup 显示阴影
  5. 找到MVC框架中前端URL与后端同步的解决方案
  6. ZOJ 1056 The Worm Turns
  7. WordPress主题制作教程5:循环
  8. 在ECSHOP首页今日特价(促销商品)增加倒计时效果
  9. iOS开发的技能树
  10. FlexComboBoxTree
  11. 行内元素为何不能设置margin-top、margin-bottom;padding-top、padding-bottom值
  12. Hibernate入门(二)
  13. Windows上MongoDB的安装
  14. beta冲刺总结-咸鱼
  15. ubuntu初始化python3+postgresql+uwsgi+nginx+django
  16. python学习——读取染色体长度(五:从命令行输入染色体长度)
  17. [图解Java]ReentrantLock重入锁
  18. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)
  19. Elasticsearch 安装和配置
  20. 破解windows版idea

热门文章

  1. (2)麻省理工:计算机科学和 Python 编程导论
  2. opencv3+python+pycharm报错问题(cmd命令正常)
  3. Django基础之数据库增删改查
  4. 360 你妈妈知道你跟Python存在兼容问题吗?
  5. IntelliJ IDEA 2017安装和破解方法
  6. .net core Elasticsearch 查询更新
  7. CAD在一个点构造选择集
  8. java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)
  9. 关于图片预览使用base64在chrome上的性能问题解决方法
  10. 来说一说chrome扩展和chrome插件到底有什么区别?