Hoj 2064 Journey to Tibet
2013-01-27 22:22
190 查看
今天HIT冬训第一次阶段赛。这一道题我一直A不掉。明明很简单,思路也对。就是WA后来发现时是 max = i;/出了错。/如果写做:max = i+1,然后在最后输出输出max是错误的。因为可能max = 0。伤不起。。。就这样断送了我的AC之路。
注意:关键在于读懂题意,是两村庄之间的距离不大于30才可以到达。
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2064
先写一发非递归版DFS:
最后写一发本题的DFS的递归版的,就当练习逻辑思维了(递归版细节要格外注意啊!!)
搜索的时候能建立Map就建立,不能建立就遍历.
DFS适合求某一个点能到达的最远距离
注意:关键在于读懂题意,是两村庄之间的距离不大于30才可以到达。
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2064
先写一发非递归版DFS:
#include <iostream> #include <math.h> #include <stdio.h> #include <string.h> #include <queue> #include <algorithm> #include <stack> using namespace std; struct Village { int x; int y; int num; }; Village v[1005]; int visited[1005]; int ans[1005]; int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int n; int x,y,num; while(scanf("%d",&n)!=EOF && n!=0) { stack<Village> st; int max = 0; int sum = 0; for(int i=0; i<n;i++) { scanf(" %d %d %d",&v[i].x,&v[i].y,&v[i].num); } for(int i=0;i<n;i++) { memset(visited,0,sizeof(visited)); memset(ans,0,sizeof(ans)); visited[i] = 1; st.push(v[i]); ans[i] += v[i].num; while(!st.empty()) { Village temp = st.top(); int flag = 0; for(int j=0;j<n;j++) { if(visited[j] == 0 && (temp.x - v[j].x)*(temp.x - v[j].x) + (temp.y - v[j].y)*(temp.y - v[j].y)<=900) { visited[j] = 1; ans[i] += v[j].num; st.push(v[j]); flag = 1; } } if(flag == 0) { st.pop(); } } if(ans[i]>sum) { sum = ans[i]; max = i;//如果写做:max = i+1,然后在最后输出输出max是错误的。 } } printf("%d %d\n",max+1,sum); } return 0; }
最后写一发本题的DFS的递归版的,就当练习逻辑思维了(递归版细节要格外注意啊!!)
#include <iostream> #include <math.h> #include <stdio.h> #include <string.h> #include <queue> #include <algorithm> #include <stack> using namespace std; struct Village { int x; int y; int num; }; Village v[1005]; int visited[1005]; int ans[1005]; int n; int max = 0; int sum = 0; int dfs(int k,int sum) { int max = sum; int tempSum = sum; for(int i=0; i<n; i++) { tempSum = sum; if(visited[i] == 0 && (v[k].x-v[i].x)*(v[k].x-v[i].x)+(v[k].y-v[i].y)*(v[k].y-v[i].y)<=900) { visited[i] = 1; tempSum = dfs(i,tempSum + v[i].num); if(tempSum>max) { max = tempSum; } visited[i] = 0; } } return max; } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int sum; int maxi; int maxSum; while(scanf("%d",&n)!=EOF && n!=0) { sum = 0; maxi = maxSum = 0; memset(visited,0,sizeof(visited)); for(int i=0; i<n; i++) { scanf(" %d %d %d",&v[i].x,&v[i].y,&v[i].num); } for(int i=0; i<n; i++) { if(visited[i] == 0) { visited[i] = 1; sum = dfs(i,v[i].num); if(sum>maxSum) { maxSum = sum; maxi = i; } visited[i] = 0; } } printf("%d %d\n",maxi+1,maxSum); } return 0; }
搜索的时候能建立Map就建立,不能建立就遍历.
DFS适合求某一个点能到达的最远距离
相关文章推荐
- HOJ 2064 Journey to Tibet (DFS)
- Hoj 2064 Journey to Tibet(递归)
- 并查集 HOJ 2064 Journey to Tibet
- HOJ2064 - Journey to Tibet - 并查集+暴力
- HOJ Journey to Tibet(小毛病大问题,下标搞混了,导致很严重的后果)
- hoj 2012 winter training Graph Day1 106 miles to Chicago图论最短路dijkstra算法
- HOJ 2634 How to earn more [网络流]最大权闭合图
- Beginning the journey of WCF, and look forward to future.
- Zuul 2 : The Netflix Journey to Asynchronous, Non-Blocking Systems--转
- HOJ 12926 Janeway’s Journey(斜率排序)
- Leaning Into Six Sigma : A Parable of the Journey to Six Sigma and a Lean Enterprise
- ZOJ 3223 Journey to the Center of the Earth
- Hoj 3136 To help the beauty
- Zuul 2 : The Netflix Journey to Asynchronous, Non-Blocking Systems
- c++ error 2064: term does not evaluate to a function taking 1 arguments解决方法
- 读《程序员修炼之道——从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)
- hoj 2634 How to earn more
- ZOJ 3223 Journey to the Center of the Earth DP+dijstra 二维最短路
- 《The Pragmatic Programmer: From Journeymen to Master》
- hoj2434 going to know him