码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷——P2083 找人

时间:2018-01-07 21:55:24      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:reg   region   for   ora   答案   algo   log   namespace   i++   

P2083 找人

题目背景

题目描述

小明要到他的同学家玩,可他只知道他住在某一单元,却不知住在哪个房间。那个单元有N层(1,2……N),每层有M(1,2……M)个房间。

小明会从第一层的某个房间开始找,他找的方式也很特别,每次到了一个房间,如果不是他的同学,他就会询问这人,

然后他就会去那人告诉他的房间号,如果还不是,他就会继续按这个方法找下去,直到找到。当然,他也有可能找不到同学。他的体力也是有限的,他每爬一层楼梯就会消耗V体力值。你的任务就是求找到同学耗费的最少体力值,如果找不到,就输出impossible 。

输入输出格式

输入格式:

 

共N+1行。

第一行,N,M,V,X,Y(X,Y表示同学只在X层Y房间)

2~N+1行,每行M*2个数字,第i+1行j*2-1个数Ak和j*2个数Ak+1表示住在i层j房间的人提供的信息是Ak层和Ak+1房间。(同学的信息就是自己的房间号)

 

输出格式:

 

一个数,即答案。

 

输入输出样例

输入样例#1: 复制
3 3 2 2 3
1 3 3 3 2 1
2 3 1 1 2 3
1 1 1 2 2 3
输出样例#1: 复制
2

说明

N<=1000,M<=100,V<=50

 

dfs、、、

zz啊、、由于本题是求最小值,因此在返回的时候不能返回-1!!!(才开始用-1判断出现环的情况,老是挂、、)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1010
#define maxn 1000000
using namespace std;
int n,m,v,xx,yy,ans;
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar();
    return  x*f;
}
struct Node
{
    int x,y;
}node[N][N];
int dfs(int x,int y,int s,int sum)
{
    if(x==xx&&y==yy) return s;
    if(sum>n*m) return maxn;
    dfs(node[x][y].x,node[x][y].y,s+abs(node[x][y].x-x),sum+1);
}
int main()
{
    ans=maxn;
    n=read(),m=read(),v=read(),xx=read(),yy=read();
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      node[i][j].x=read(),node[i][j].y=read();
    for(int i=1;i<=m;i++) 
     ans=min(ans,dfs(1,i,0,0));
    if(ans==maxn) printf("impossible");
    else printf("%d",ans*v);
    return 0;
}

 

洛谷——P2083 找人

标签:reg   region   for   ora   答案   algo   log   namespace   i++   

原文地址:https://www.cnblogs.com/z360/p/8231481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!