BFS

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
typedef struct node{
    int x;
    int y;
    int step;
}node;
int map[SIZE][SIZE]={{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}};
node queue[30];
int head,tail;//队列头和队列尾
int step;
int x[4]={-1,0,+1,0};//x坐标的变化
int y[4]={0,+1,0,-1};//y坐标的变化
/* 函数名:enqueue
*  功能:入队
*  入口参数:要入队的节点
*  返回值:暂无
*/
void enqueue(node E){//用tail(对尾)进行插入操作
    queue[tail++] = E;//先入队,然后tail加一
}
/* 函数名:dequeue
*  功能:出队
*  入口参数:要出队的节点
*  返回值:出队的元素
*/
node dequeue(){//用head(队头)进行删除操作
    return queue[head++];//先出队,然后head加一
}

int main(){
    //源点入队列
    node SourcePoint ={4,4,2};
    enqueue(SourcePoint);
    step = 0;
    int count=3;
    map[4][4] = 2;//把传染源置为2
    node CurPoint ={};//当前点
    node NewPoint ={};//新的点
    while(head<tail){
        
        CurPoint = dequeue();//当前点出队列
        for(int i=0;i<4;i++){
            NewPoint.x = CurPoint.x + x[i];
            NewPoint.y = CurPoint.y + y[i];
            NewPoint.step = CurPoint.step+1;

            if((NewPoint.x<SIZE&&NewPoint.y<SIZE)&&(map[NewPoint.x][NewPoint.y]==1))
            {
                //CurPoint.x = NewPoint.x;
                //CurPoint.y = NewPoint.y;
                //map[CurPoint.x][CurPoint.y]=count;
    //             enqueue(CurPoint);

                  map[NewPoint.x][NewPoint.y] = NewPoint.step;
                  enqueue(NewPoint);

            }
        }
    }
    for(int i=0;i<SIZE;i++){
        for(int j=0;j<SIZE;j++)
        {
            printf("%d ",map[i][j]);
        }
        printf("
");
    }
 //     { printf("%d",map[i]);
    //printf("
");}
    system("pause");
}
大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
原文地址:https://www.cnblogs.com/linux0537/p/6098096.html