Picking up Jewels
Picking up Jewels
There is a maze that has one entrance and one exit.
Jewels are placed in passages of the maze.
You want to pick up the jewels after getting into the maze through the entrance and before getting out of it through the exit.
You want to get as many jewels as possible, but you don’t want to take the same passage you used once.
When locations of a maze and jewels are given,
find out the greatest number of jewels you can get without taking the same passage twice, and the path taken in this case.
Time limit : 1 sec (Java : 2 sec) (If your program exceeds this time limit, the answers that have been already printed are ignored and the score becomes 0. So, it may be better to print a wrong answer when a specific test case
might cause your program to exceed the time limit. One guide for the time limit excess would be the size of the input.)
[Input]
There can be more than one test case in the input file. The first line has T, the number of test cases.
Then the totally T test cases are provided in the following lines (T ≤ 10 )
In each test case,
In the first line, the size of the maze N (1 ≤ N ≤ 10) is given. The maze is N×N square-shaped.
From the second line through N lines, information of the maze is given.
“0” means a passage, “1” means a wall, and “2” means a location of a jewel.
The entrance is located on the upper-most left passage and the exit is located on the lower-most right passage.
There is no case where the path from the entrance to the exit doesn’t exist.
[Output]
For each test case, you should print "Case #T" in the first line where T means the case number.
For each test case, from the first line through N lines, mark the path with 3 and output it.
In N+1 line, output the greatest number of jewels that can be picked up.
[I/O Example]
Input
0 0 0 2 0
2 1 0 1 2
0 0 2 2 0
0 1 0 1 2
2 0 0 0 0
0 1 2 1 0 0
0 1 0 0 0 1
0 1 2 1 2 1
0 2 0 1 0 2
0 1 0 1 0 1
2 0 2 1 0 0
Output
Case #1
3 0 3 3 3
3 1 3 1 3
3 0 3 2 3
3 1 3 1 3
3 3 3 0 3
Case #2
3 1 2 1 0 0
3 1 3 3 3 1
3 1 3 1 3 1
3 2 3 1 3 2
3 1 3 1 3 1
3 3 3 1 3 3
/*
You should use the statndard input/output
in order to receive a score properly.
Do not use file input and output
Please be very careful.
*/
#include <stdio.h>
#define MAX_N 11
#define true 1
#define false 0
int Array[MAX_N][MAX_N];
int Path[MAX_N][MAX_N];//保存走过的路径
int Visited[MAX_N][MAX_N];//标记走过的路径
int Answer[MAX_N][MAX_N];
int Max_Jewes;
int N;
//int total ;
//int Answer = 0 ;
void SavePath()
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
Answer[i][j] = Path[i][j];
}
}
}
int Visit(int i, int j, int total)
{
int ret = 0;
Path[i][j] = 3 ;
Visited[i][j] = true ;
{
total++;
}
if((i == N-1)&&(j == N-1))//假设到达终点,则推断本次遍历的结果和之前全部次数中最大的结果最比較。假设大于之前的结果。则保存这个最大值和本次路径
{
if(total > Max_Jewes)
{
Max_Jewes = total ;
SavePath();
}
Visited[i][j] = false ;//将终点标记成未扫描过,使下一次遍历还能够扫描到该点
return 1;
}
if((j+1) <= (N-1))//down
{
)
{
。继续遍历
Visit(i, j+1, total+1);
else
Visit(i, j+1, total);//假设没有宝藏,则总数不变,继续遍历
Path[i][j+1] = Array[i][j+1] ;//死角,回退之后恢复path的值
}
}
if((j-1) >= 0)//up
{
if((!Visited[i][j-1])&&(Array[i][j-1] != 1))
{
if(Array[i][j-1] == 2)
Visit(i , j-1, total+1);
else
Visit(i , j-1, total);
Path[i][j-1] = Array[i][j-1] ;
}
}
if((i+1) <= (N-1))//right
{
if((!Visited[i+1][j])&&(Array[i+1][j] != 1))
{
if(Array[i+1][j] == 2)
Visit(i+1 , j, total+1);
else
Visit(i+1 , j, total);
Path[i+1][j] = Array[i+1][j] ;
}
}
if((i-1) >= 0)//left
{
if((!Visited[i-1][j])&&(Array[i-1][j] != 1))
{
if(Array[i-1][j] == 2)
Visit(i-1 , j, total+1);
else
Visit(i-1 , j, total);
Path[i-1][j] = Array[i-1][j];
}
}
Visited[i][j] = false ;
return -1;
}
int main(void)
{
int T, test_case;
/*
The freopen function below opens input.txt file in read only mode, and afterward,
the program will read from input.txt file instead of standard(keyboard) input.
To test your program, you may save input data in input.txt file,
and use freopen function to read from the file when using scanf function.
You may remove the comment symbols(//) in the below statement and use it.
But before submission, you must remove the freopen function or rewrite comment symbols(//).
*/
freopen("sample_input.txt", "r", stdin);
/*
If you remove the statement below, your program's output may not be rocorded
when your program is terminated after the time limit.
For safety, please use setbuf(stdout, NULL); statement.
*/
setbuf(stdout, NULL);
scanf("%d", &T);
for(test_case = 0; test_case < T; test_case++)
{
int i ,j ;
//total = 0 ;
Max_Jewes = -1 ;
scanf("%d",&N);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&Array[i][j]);
Path[i][j] = Array[i][j];
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
Visited[i][j] = false ;////初始化遍历标志
}
}
Visit(0 , 0, 0);
printf("Case #%d\n", test_case+1);
//printf("%d\n", Answer);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d ",Answer[i][j]);
}
printf("\n");
}
printf("%d\n", Max_Jewes);
/////////////////////////////////////////////////////////////////////////////////////////////
/*
Implement your algorithm here.
The answer to the case will be stored in variable Answer.
*/
/////////////////////////////////////////////////////////////////////////////////////////////
//Answer = 0;
// Print the answer to standard output(screen).
//printf("Case #%d\n", test_case+1);
//printf("%d\n", Answer);
}
return 0;//Your program should return 0 on normal termination.
}
Picking up Jewels的更多相关文章
- hdu.1044.Collect More Jewels(bfs + 状态压缩)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- Google Code Jam 2010 Round 1B Problem B. Picking Up Chicks
https://code.google.com/codejam/contest/635101/dashboard#s=p1 Problem A flock of chickens are runn ...
- HDU 1044 Collect More Jewels(BFS+DFS)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 深入理解OpenGL拾取模式(OpenGL Picking)
深入理解OpenGL拾取模式(OpenGL Picking) 本文转自:http://blog.csdn.net/zhangci226/article/details/4749526 在用OpenGL ...
- hdu 1044 Collect More Jewels(bfs+状态压缩)
Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- codechef Jewels and Stones 题解
Soma is a fashionable girl. She absolutely loves shiny stones that she can put on as jewellery acces ...
- The Material Sourcing Process Failed To Create Picking Suggestions in INVTOTRX (文档 ID 2003806.1)
In this Document Symptoms Cause Solution References Applies to: Oracle Inventory Management - Versio ...
- 实现一个简单的Unity3D三皮卡——3D Picking (1)
3D Picking 其原理是从摄像机位置到空间发射的射线.基于光线碰到物体回暖. 这里我们使用了触摸屏拿起触摸,鼠标选择相同的原理,仅仅是可选API不同. 从unity3D官网Manual里找到下面 ...
- LeetCode --> 771. Jewels and Stones
Jewels and Stones You're given strings J representing the types of stones that are jewels, and S rep ...
随机推荐
- 经验之谈—OAuth授权流程图
事实上我们在开发中,常常须要解决获得用户的一些特定的数据,比方:能够选择使用微博登陆.使用QQ登陆等等.然后我们间接的获得用户的头像.昵称等信息.这些都涉及到OAuth授权的内容 OAuth授权有这么 ...
- 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇
作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...
- memcached—向memcached中保存Java实体需注意的问题
今天以代码实例的形式总结一下向memcached中保存Java实体需注意的问题: memcached工具类代码: package com.ghj.packageoftool; import java. ...
- 浅析Context Class Loader
浅析Context Class Loader 2010-05-11 16:58:49 分类: Java 转载自 薛笛的专栏http://blog.csdn.net/kabini/archive/200 ...
- HDU 1113 Word Amalgamation (map 容器 + string容器)
http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...
- mahout demo——本质上是基于Hadoop的分步式算法实现,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储
摘自:http://blog.fens.me/mahout-recommendation-api/ 测试程序:RecommenderTest.java 测试数据集:item.csv 1,101,5.0 ...
- 杂项:WCF
ylbtech-杂项:WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了 ...
- 关于div中图片水平垂直居中的问题
最近在做一个项目,里面涉及到不固定尺寸要在div里面水平垂直居中显示 我没有用table布局,而是用了div+css,找了很久,终于在网上找到解决方案,特此记录备用 关键核心代码如下: <div ...
- word-break属性和css换行显示
这几天在做项目的时候,遇到了比较棘手的问题,便是在一个标签里边展示内容,如果说展示中文汉字,一点问题都没有,但是只要连续展示英文字母或者中文的标点符号(中间不带空格),那么所渲染的内容就不会换行,而是 ...
- Unity中 Animator 与Animation 区别
①Animation和Animator 虽然都是控制动画的播放,但是它们的用法和相关语法都是大有不同的.Animation 控制一个动画的播放,而Animator是多个动画之间相互切换,并且Anima ...