DFS BFS

拯救007

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int map[300][300],book[300][300];
int d;
int  dfs(int y,int x)
{
    int i,j;
    book[y][x]=1;
    if(y==100&&x==100)
    {
        for(i=y-d-8;i<=y+d+8;i++)
        {
            for(j=x-d-8;j<=x+d+8;j++)
            {
                if((i-y)*(i-y)+(j-x)*(j-x)<=(d+8)*(d+8)&&book[i][j]==0)
                {
                    if(j<=50||j>=150||i<=50||i>=150)
                    {
                        return 1;
                    }
                    if(map[i][j]==1)
                    {
                        if(dfs(i,j))
                        {
                            return 1;
                        }
                    }
                }
            }
        }
    }
    else
    {
        for(i=y-d;i<=y+d;i++)
        {
            for(j=x-d;j<=x+d;j++)
            {
                if((i-y)*(i-y)+(j-x)*(j-x)<=d*d&&book[i][j]==0)
                {
                    if(j<=50||j>=150||i<=50||i>=150)
                    {
                        return 1;
                    }
                    if(map[i][j]==1)
                    {
                        if(dfs(i,j))
                        {
                            return 1;
                        }
                    }
                }
            }
        }
    }
    return 0;
}
int main()
{
    int n,i,a,b;
    scanf("%d %d",&n,&d);
    for(i=1;i<=n;i++)
    {
        scanf("%d %d",&a,&b);
        map[a+100][b+100]=1;
    }
    if(dfs(100,100))
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    return 0;
}

列出连通集

#include<iostream>
#include<stdio.h>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
int mp[100][100];
int n,m;
int vis[100]= {0};
void dfs(int x) {
	for(int i=0; i<n; i++) {
		if(vis[i]==0&&mp[x][i]==1) {
			vis[i]=1;
			cout<<" "<<i;
			dfs(i);//递归
//			cout<<"sd";
		}
	}

}
queue<int >q;
void bfs(int x) {
	while(!q.empty()) {
		q.pop();
	}//保证队列为空
	q.push(x);//x入列
	while(!q.empty()) {
		int u=q.front();//取出来队首
		q.pop();//出列
		for(int i=0; i<n; i++) {
			if(!vis[i]&&mp[u][i]) { //当当前节点未被标记&&道路可达进入下一步
				vis[i]=1;//标记当前节点
				cout<<" "<<i;
				q.push(i);//将道路另外一旁入列
			}
		}
	}
}
int main() {
	for(int i=0; i<100; i++) {
		for(int j=0; j<100; j++) {
			mp[i][j]=0;
		}
	}
	cin>>n>>m;
	for(int i=0; i<m; i++) {
		int a,b;
		cin>>a>>b;
		mp[a][b]=mp[b][a]=1;
	}
	for(int i=0; i<n; i++) {

		if(vis[i]==0) {
			cout<<"{ "<<i;

			vis[i]=1;
			dfs(i);
			printf(" }\n");//递归出口
		}
	}
	memset(vis,0,sizeof(vis));
	for(int i=0; i<n; i++) {
		if(!vis[i]) {
			vis[i]=1;
			cout<<"{ "<<i;
			bfs(i);
			cout<<" }"<<endl;//bfs出口

		}
	}


	return 0;
}
发布了13 篇原创文章 · 获赞 1 · 访问量 134

猜你喜欢

转载自blog.csdn.net/safafs/article/details/105706127