啊哈算法搜索应用之宝岛探险(BFS和DFS)

来源:互联网 发布:ios清除文稿与数据 编辑:程序博客网 时间:2024/05/01 04:32
//广搜#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{    int x;    int y;};struct node queue[100];//队列实现广搜int head=0;int tail=0;int map[51][51];//存图int book[51][51];//标记走过的点int n;//图的规模int startx,starty;//降落点int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}};void bfs(int x,int y,int color){    if(head>=tail)        return;    int xnext,ynext;    for(int i=0;i<4;i++){        xnext=x+next[i][0];        ynext=y+next[i][1];        if(xnext>=1&&xnext<=n&&ynext>=1&&ynext<=n&&map[xnext][ynext]!=0&&book[xnext][ynext]==0){            map[xnext][ynext]=-1;            book[xnext][ynext]=1;            queue[tail].x=xnext;            queue[tail].y=ynext;            tail++;        }    }    head++;    bfs(queue[head].x,queue[head].y,color);    return;}int main(){    scanf("%d",&n);    scanf("%d%d",&startx,&starty);    for(int i=0;i<51;i++)       memset(book[i],0,sizeof(book[i]));    for(int i=1;i<=n;i++)      for(int j=1;j<=n;j++)        scanf("%d",&map[i][j]);    int color=-1;//标记可到达的地方    map[startx][starty]=color;    queue[tail].x=startx;    queue[tail].y=starty;    tail++;    bfs(startx,starty,color);    for(int i=1;i<=n;i++)//输出处理过的图        for(int j=1;j<=n;j++)          printf("%2d%c",map[i][j],j==n?'\n':' ');    return 0;}
//深搜#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{    int x;    int y;};int map[51][51];//存图int book[51][51];//标记走过的点int n;//图的规模int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}};int startx,starty;void dfs(int x,int y,int color){    int xnext,ynext;    for(int i=0;i<4;i++){        xnext=x+next[i][0];        ynext=y+next[i][1];        if(xnext>=1&&xnext<=n&&ynext>=1&&ynext<=n&&map[xnext][ynext]!=0&&book[xnext][ynext]==0){            book[xnext][ynext]=1;            map[xnext][ynext]=color;            dfs(xnext,ynext,color);            //book[xnext][ynext]=0; //深搜不一定有此句,根据需求定        }    }    return;}int main(){    scanf("%d",&n);    scanf("%d%d",&startx,&starty);    for(int i=0;i<51;i++)       memset(book[i],0,sizeof(book[i]));    for(int i=1;i<=n;i++)      for(int j=1;j<=n;j++)        scanf("%d",&map[i][j]);    int color=-1;//标记可到达的地方    map[startx][starty]=color;    book[startx][starty]=1;    dfs(startx,starty,color);    for(int i=1;i<=n;i++)//输出处理过的图        for(int j=1;j<=n;j++)          printf("%2d%c",map[i][j],j==n?'\n':' ');    return 0;}


1 0
原创粉丝点击