zoukankan      html  css  js  c++  java
  • 懒羊羊找朋友

    校内测崩了。

    一道bfs水题读错题目。

    直接广搜,记录答案然后排序。
    懒羊羊找朋友(
    friend.pas/in/out
    问题描述:
    最近电视上热播“喜羊羊与灰太狼”,大家都说“做人要做懒羊羊”,为什么呢?因为他
    不愿意多做一个动作、不愿意多动一个脑筋,甚至懒得张嘴吃饭,简直是懒的无与伦比!
    话说羊村的羊还真多啊!每周一早晨,羊村老村长慢羊羊同志学着人类的学校,把所有
    羊列队在广场上进行思想教育,主要是保持警惕防止狼类的攻击,当然也包括对懒羊羊之类
    的“异类”进行批评教育。
    羊群列队成一个
    m*n
    的方阵,每只羊站在一个格子里,而且是长期固定的,便于点名啊:)
    晕倒!当然,这样一来的好处是,大家都知道自己的朋友站在哪个位置,虽然它们可能互相
    看不见,但心里都知道,并且在老村长进行无聊的训教时,大家都还想赶快结束赶快找离自
    己最近的朋友交流周末的开心事呢?
    懒羊羊也想尽快找到自己的好朋友聊天,但是他既不愿意多走路、又不愿意动脑筋去想
    怎么走,所以就请智羊羊同学帮它编个程序,以便快速定位找到离它最近的一位好朋友。
    如果你是智羊羊,你怎么完成这个任务呢?
    问题输入:
    1
    行为两个整数
    m
    n
    2<=m,n<=100
    第2行为懒羊羊的位置x,y,表示在第x行y列。以下m行为一个m*n的数字方阵,所有a[i,j]的值相等的表示是好朋友,1<=a[i,j]<=100。
    每行的两个数之间都有一个空格分隔。
    问题输出:
    输出一行两个数
    x1,y1,表示懒羊羊最近的一个朋友的位置在第x1行y1列,之间用一个空格隔开。如果最近的的朋友不只一个,则输出x1最小的,如果还不唯一则输出y1最小的。数据保证懒羊羊一定有朋友。
    输入样例:
    4 4
    1 2
    2 1 2 1
    1 3 1 3
    2 1 2 2
    2
    /
    4
    2 2 1 3
    输出样例:
    1 4
    样例解释:
    懒羊羊(1,2)有5个朋友,其中3个朋友(2,1)、(2,3)、(1,4)离它的距离都是
    一样的(2),但是其中的x1=1是最小的。
    代码:

    #include <cstdio>
    #include <queue>
    #include <algorithm>

    using namespace std;

    typedef long long int ll;
    const int maxn=105;
    struct wjz{
    int x,y,d;
    };
    bool cmp(wjz a,wjz b){
    if(a.d=b.d){
    if(a.x==b.x){
    return a.y<b.y;
    }
    else{
    return a.x<b.x;
    }
    }else{
    return a.d<b.d;
    }
    }
    queue<wjz>q;
    int dx[4]={-1,0,0,1};
    int dy[4]={0,-1,1,0};
    int n,m;
    int a,b,tot;
    wjz ans[maxn];
    int s[maxn][maxn];
    bool vis[maxn][maxn];
    int main(){
    scanf("%d%d",&n,&m);
    scanf("%d%d",&a,&b);
    for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
    scanf("%d",&s[i][j]);
    }
    }
    q.push(wjz{a,b,0});
    vis[a][b]=1;
    while(!q.empty()){
    wjz x=q.front();
    q.pop();
    for(int i=0;i<4;i++){
    int ax=x.x+dx[i],ay=x.y+dy[i];
    if((s[ax][ay]==s[a][b])&&(ax!=a||ay!=b)){
    ans[++tot].x=ax;ans[tot].y=ay;ans[tot].d=x.d+1;
    }
    if(!vis[ax][ay]&&ax<=m&&ax>=1&&ay<=n&&ay>=0){
    vis[ax][ay]=1;
    q.push(wjz{ax,ay,x.d+1});
    }
    }
    }
    sort(ans+1,ans+1+tot,cmp);
    printf("%d %d ",ans[1].x,ans[1].y);
    return 0;
    }

  • 相关阅读:
    learn the python the hard way习题11~17总结
    JavaScript 第三章总结
    JavaScript 第二章总结
    JavaScript 第一章总结
    Getting started with Processing 示例11-9 追随鼠标移动
    第二十章 更新和删除数据
    第十九章 插入数据
    第十八章 全文本搜索
    第十七章 组合查询
    第十六章 创建高级联结
  • 原文地址:https://www.cnblogs.com/weijianzhen/p/13345263.html
Copyright © 2011-2022 走看看