• 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

    能理解,,想不到。

    神奇。

    搜索代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn=1000000;
    
    int n,m,v,xx,yy,ans=maxn;
    
    struct node{
    	int x,y;
    }a[1002][1002];
    
    int dfs(int x,int y,int s,int sum)
    {
    	if(x==xx&&y==yy) return s;
    	if(sum>n*m) return maxn;
    	dfs(a[x][y].x ,a[x][y].y ,s+abs(a[x][y].x -x),sum+1);
    }
    
    int main()
    {
    	scanf("%d%d%d%d%d",&n,&m,&v,&xx,&yy);
    	for(int i=1;i<=n;++i)
    		for(int j=1;j<=m;++j)
    			scanf("%d%d",&a[i][j].x ,&a[i][j].y );
    	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;	
    }

    如果你不开心,那我就把右边这个帅傻子分享给你吧,  

    你看,他这么好看,那么深情的望着你,你还伤心吗?  

    真的!这照片盯上他五秒钟就想笑了。  

    一切都会过去的。    

  • 相关阅读:
    springboot中如何向redis缓存中存入数据
    elasticSearch索引库查询的相关方法
    java客户端的elasticSearch索引库的相关操作
    lucene索引的增、删、改
    lucene的索引查询
    框架
    GG
    总结
    阿里的代码规范检查工具
    传统架构与SOA架构的区别和特点:
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9683704.html
Copyright © 2020-2023  润新知