深度和广度查找

#include <iostream.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <math.h>

void fun(int (*a)[5],int i,int j,int m)

{

    if(i<0||j<0||i>=m||j>=m||a[i][j]!=1) return;

    a[i][j]=2;

    fun(a,i-1,j,m);

    fun(a,i+1,j,m);

    fun(a,i,j-1,m);

    fun(a,i,j+1,m);

}

typedef struct Point{

    int x;

    int y;

}Point;

typedef struct Data{

    Point a[100];

    int length;

}Data;

void EnQueue(Data& data,int i,int j,int (*array)[5],int m)

{

    if(i<0||j<0||i>=m||j>=m||array[i][j]!=1) return;

    Point temp;

    temp.x=i;

    temp.y=j;

    data.a[data.length]=temp;

    data.length++;

    array[i][j]=0;

}

Point DeQueue(Data& data)

{

    Point temp;

    temp=data.a[0];

    for (int i=0;i<data.length-1;i++)

    {

        data.a[i]=data.a[i+1];

    }

    data.length--;

    return temp;

}

void deep(int (*array)[5],int i,int j,int m)

{

    Data data;

    data.length=0;

    EnQueue(data,i,j,array,m);

    while (data.length)

    {

        Point temp=DeQueue(data);

        EnQueue(data,temp.x-1,temp.y,array,m);

        EnQueue(data,temp.x+1,temp.y,array,m);

        EnQueue(data,temp.x,temp.y-1,array,m);

        EnQueue(data,temp.x,temp.y+1,array,m);

    }



}

void main()

{

    srand((unsigned)time(NULL));

    int map[5][5];

    for (int i=0;i<5;i++)

    {

        for (int j=0;j<5;j++)

        {

            map[i][j]=rand()%2;

            cout<<map[i][j]<<"  ";

        }

        cout<<endl;

    }

    int many=0;

    /*for (i=0;i<10;i++)

    {

        for (int j=0;j<10;j++)

        {

            if(map[i][j]==1)

            { 

                fun(map,i,j,10);many++;

                cout<<endl;

                for (int ii=0;ii<10;ii++)

                {

                    for (int jj=0;jj<10;jj++)

                    {

                        

                        cout<<map[ii][jj]<<"  ";

                    }

                    cout<<endl;

                }

            }

            

        }

        

    }*/

    for (i=0;i<5;i++)

    {

        for (int j=0;j<5;j++)

        {

            if(map[i][j]==1)

            { 

                deep(map,i,j,5);many++;

                cout<<endl;

                for (int ii=0;ii<5;ii++)

                {

                    for (int jj=0;jj<5;jj++)

                    {

                        cout<<map[ii][jj]<<"  ";

                    }

                    cout<<endl;

                }

            }

            

        }

        

    }

    

    cout<<many<<endl;

}

你可能感兴趣的:(查找)