您的位置:首页 > 其它

red and black广度搜索算法实现

2014-05-08 10:50 417 查看
#include<stdio.h>

#include<queue>

using namespace std;

struct Node{

int x;

int y;

Node(int a,int b){

this->x=a;

this->y=b;

}

};

char a[22][22];

int c;

void search(int X,int Y){

queue<Node>myqueue;//建立队列,里面装入Node;

myqueue.push(Node(X,Y));

a[X][Y]='#';

c++;

while(!myqueue.empty()){//将相邻的并且为'.'的格子加1,并标记为'#',避免重复走.

if(a[myqueue.front().x+1][myqueue.front().y]=='.'){

myqueue.push(Node(myqueue.front().x+1,myqueue.front().y));

c++;

a[myqueue.front().x+1][myqueue.front().y]='#';

}

if(a[myqueue.front().x-1][myqueue.front().y]=='.'){

myqueue.push(Node(myqueue.front().x-1,myqueue.front().y));

c++;

a[myqueue.front().x-1][myqueue.front().y]='#';

}

if(a[myqueue.front().x][myqueue.front().y+1]=='.'){

myqueue.push(Node(myqueue.front().x,myqueue.front().y+1));

c++;

a[myqueue.front().x][myqueue.front().y+1]='#';

}

if(a[myqueue.front().x][myqueue.front().y-1]=='.'){

myqueue.push(Node(myqueue.front().x,myqueue.front().y-1));

c++;

a[myqueue.front().x][myqueue.front().y-1]='#';

}

myqueue.pop();

}

}

int main(){

int m,n,i,j,row,line;

chare;

while(scanf("%d%d",&m,&n)!=EOF&&m&&n){

c=0;

scanf("%c",&e);

for(i=1;i<=n;i++){

for(j=1;j<=m;j++){

scanf("%c",&a[i][j]);

if(a[i][j]=='@'){

row=i;

line=j;

}

}

if(i<n)scanf("%c",&e);

}

for(i=0;i<=n+1;i++)

a[i][0]=a[i][m+1]='#';

for(j=0;j<=m+1;j++)

a[0][j]=a[n+1][j]='#';

search(row,line);

printf("%d\n",c);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: