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

zoombies

时间:2017-04-05 13:05:48      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:style   struct   inf   fine   移动   维数   ==   size   ++   

//最短路径问题
//求一个迷宫的入口和出口间的最短路径的长度
//约束条件:迷宫中0的点可以走,1的点是障碍,不能走
//每次移动只能上、下、左、右移动1个位置,路径不能产生交叉

//僵尸传染:
//用二维数组表示一个地图,地图上为1的点代表有人,为0的点代表空地
//开始时,只有一个人被病毒感染,变成了僵尸
//变成僵尸的人可以传染其他人,每一秒可以上、下、左、右四个方向距离为1的人传染
//求最终有多少人被感染,使用多长时间


// 1 1 1 1 1 1 1 1 1 1
// 1 1 1 1 1 1 1 1 1 1
// 1 1 1 1 5 1 1 1 1 1
// 1 1 1 5 4 5 1 1 1 1
// 1 1 5 4 3 4 5 1 1 1
// 1 5 4 3 2 3 4 5 1 1
// 1 1 5 4 3 4 5 1 1 1
// 1 1 1 5 4 5 1 1 1 1
// 1 1 1 1 5 1 1 1 1 1
// 1 1 1 1 1 1 1 1 1 1
// 1 1 1 1 1 1 1 1 1 1
// 1 1 1 1 1 1 1 1 1 1

//int curStep;

//BFS可以求的内容:
//源点能否到达某一个点
//源点到所有其他点的最短路径的距离
//可以记录一条最短路径(但只能记录一条)


#include <iostream>
using namespace std;

#define SIZE 1000
int map[SIZE][SIZE];

int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};

void infect(int sx, int sy){
    int curStep = 2;
    map[sx][sy] = curStep;
    while(1){
        int getNewPeople = 0;
        for(int i = 0; i < SIZE; i++){
            for(int j = 0; j < SIZE; j++){
                if(map[i][j] == curStep){
                    for(int k = 0; k < 4; k++){
                        int nx = i + dx[k];
                        int ny = j + dy[k];
                        if(nx < SIZE && nx >= 0 && ny < SIZE && ny >= 0 && map[nx][ny] == 1){
                            map[nx][ny] = curStep + 1;
                            getNewPeople = 1;
                        }
                    }
                }
            }
        }
        if(getNewPeople == 0) break;
        curStep++;
    }
}

struct node{
    int x;
    int y;
};

node Nodes[SIZE * SIZE];
int head = 0;
int tail = 0;

void zombbieInfect(int sx, int sy){
    int curStep = 2;
    map[sx][sy] = curStep;
    node tmpNode;
    tmpNode.x = sx;
    tmpNode.y = sy;
    Nodes[tail] = tmpNode;
    tail++;

    while(head < tail){
        node curNode = Nodes[head];
        head++;

        for(int k = 0; k < 4; k++){
            int nx = curNode.x + dx[k];
            int ny = curNode.y + dy[k];
            if(nx < SIZE && nx >= 0 && ny < SIZE && ny >= 0 && map[nx][ny] == 1){
                map[nx][ny] = map[curNode.x][curNode.y] + 1;
                tmpNode.x = nx;
                tmpNode.y = ny;
                Nodes[tail] = tmpNode;
                tail++;
            }
        }
    }
}

int main(){
    for(int i = 0; i < SIZE; i++){
        for(int j = 0; j < SIZE; j++){
            map[i][j] = 1;
        }
    }
    zombbieInfect(5, 5);

    //for(int i = 0; i < SIZE; i++){
    //    for(int j = 0; j < SIZE; j++){
    //        cout << map[i][j] << " ";
    //    }
    //    cout << endl;
    //}
    return 0;
}

 

zoombies

标签:style   struct   inf   fine   移动   维数   ==   size   ++   

原文地址:http://www.cnblogs.com/xcsllll/p/6667994.html

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