DFS---Lake Counting&& Oil Deposits&&迷宫问题

来源:互联网 发布:药品进销存软件免费版 编辑:程序博客网 时间:2024/06/06 04:05
#include<stdio.h>#include<string.h>char  maze[100][100];int n,m,i,j,sum;int dir[8][2]={    {0,1},{0,-1},    {1,0},{-1,0},    {1,1},{1,-1},    {-1,-1},{-1,1}};int  dfs(int x,int y){    for(int i=0;i<8;i++){        int dx=x+dir[i][0],dy=y+dir[i][1];        if(dx>=0&&dy>=0&&dx<n&&dy<m&&maze[dx][dy]=='W'){            maze[dx][dy]='.';            dfs(dx,dy);        }    }return 0;}int main(){    scanf("%d%d",&n,&m);    sum=0;    for(int i=0;i<n;i++)    scanf("%s",&maze[i]);       /*printf("\n"); for(i=0;i<n;i++)    printf("%s\n",maze[i]);*/   for(i=0;i<n;i++)    for(j=0;j<m;j++)    if(maze[i][j]=='W') {    maze[i][j]='.';sum++;dfs(i,j);    }    printf("%d\n",sum);    return 0;}



#include<stdio.h>#include<string.h>char  maze[100][100];int n,m,i,j,sum;int dir[8][2]={    {0,1},{0,-1},    {1,0},{-1,0},    {1,1},{1,-1},    {-1,-1},{-1,1}};int  dfs(int x,int y){    for(int i=0;i<8;i++){        int dx=x+dir[i][0],dy=y+dir[i][1];        if(dx>=0&&dy>=0&&dx<n&&dy<m&&maze[dx][dy]=='@'){            maze[dx][dy]='*';            dfs(dx,dy);        }    }return 0;}int main(){    while(scanf("%d%d",&n,&m)!=EOF){    sum=0;if(n==0&&m==0) break;    for(int i=0;i<n;i++)    scanf("%s",&maze[i]);       /*printf("\n"); for(i=0;i<n;i++)    printf("%s\n",maze[i]);*/   for(i=0;i<n;i++)    for(j=0;j<m;j++)    if(maze[i][j]=='@') {    maze[i][j]='*';sum++;dfs(i,j);    }    printf("%d\n",sum);}    return 0;}
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;int maze[6][6],temproad[25][2],pos=0;int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};struct Road{    int r[30][2],step;}roads[11];int dfs(int x,int y,int step){    if(x==4&&y==4){        roads[pos].step=step;        for(int i=1;i<step;i++){            roads[pos].r[i][0]=temproad[i][0];            roads[pos].r[i][1]=temproad[i][1];//当到达重点后把temproad复制给roads        }        pos++;        return 0;    }    for(int i=0;i<4;i++){        int dx=x+dir[i][0],dy=y+dir[i][1];        if(dx>=0&&dy>=0&&dx<5&&dy<5&&!maze[dx][dy]){            maze[dx][dy]=1;            temproad[step][0]=dx,temproad[step][1]=dy;//暂时用temproad保存            dfs(dx,dy,step+1);            maze[dx][dy]=0;//返回一步,查找别的路线        }    }}int main(){    for(int i=0;i<5;i++)        for(int j=0;j<5;j++)        scanf("%d",&maze[i][j]);    dfs(0,0,1);    int ans=0;    for(int i=1;i<pos;i++)        if(roads[i].step<roads[ans].step)//找到第几条路最小        ans=i;    for(int i=0;i<roads[ans].step;i++)//输出        printf("(%d, %d)\n",roads[ans].r[i][0],roads[ans].r[i][1]);}
0 0
原创粉丝点击