POJ--1979
BFS问题,根据原来代码修改一部分即可
#include <stdio.h> #include <stdlib.h> #define size 20 //先模拟_为1,#为0,生成数组如下: int map[size][size]={0};//用于bfs的数组 int input[size][size]={0};//用于文件读入的数组 //int map[size][size]={{1,1,1,1,0,1},{1,1,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,1,1,1,1,1},{0,1,1,1,1,0},{1,0,1,1,0,1}}; typedef struct node{ int x; int y; int step; }node; node queue[100000]; int head,tail;//队列头和队列尾 int x[4]={-1,0,+1,0};//x坐标的变化 int y[4]={0,+1,0,-1};//y坐标的变化 int num=0; int W=0,H=0; node sourcepoint={7,1,2};//源点 int handle; /* 函数名:enqueue * 功能:入队 * 入口参数:要入队的节点 * 返回值:暂无 */ void enqueue(node E){//用tail(对尾)进行插入操作 queue[tail++] = E;//先入队,然后tail加一 } /* 函数名:dequeue * 功能:出队 * 入口参数:要出队的节点 * 返回值:出队的元素 */ node dequeue(){//用head(队头)进行删除操作 return queue[head++];//先出队,然后head加一 } /* 函数名:bfs * 功能:广度优先搜索 * 入口参数:1.源点坐标 2. * 返回值: */ void bfs(node sourcepoint,int W,int H){ map[sourcepoint.x][sourcepoint.y]=2;//把传染源置为2 enqueue(sourcepoint);//源点入队 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<H)&&(NewPoint.y<W)&&(NewPoint.x>=0)&&(NewPoint.y>=0)&&(map[NewPoint.x][NewPoint.y]==1))//模拟_为1,#为0 { map[NewPoint.x][NewPoint.y] = NewPoint.step; enqueue(NewPoint); } } } } void init_map(){ for(int i=0;i<H;i++) { for(int j=0;j<W;j++) { if(input[i][j]==46) { map[i][j] = 1; } else if(input[i][j]==35) { map[i][j] = 0; } else if(input[i][j]==64) { sourcepoint.x = i; sourcepoint.y = j; map[i][j] =1; } } } } int main(){ bool ret=true;//截止条件 //freopen("input.txt","r",stdin); while(ret){ scanf("%d",&W); scanf("%d",&H); if(W==0&&H==0) {ret = false; return 0;} scanf("%c",&handle); for(int i=0;i<H;i++){ for(int j=0;j<W;j++){ scanf("%c",&input[i][j]); } scanf("%c",&handle);//每一行的垃圾 } init_map(); bfs(sourcepoint,W,H); num = 0; for(int i=0;i<H;i++){ for(int j=0;j<W;j++) { if(map[i][j]>1) { num++; } //printf("%d ",map[i][j]); } //printf("\n"); } printf("%d\n",num); } }
大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。