拯救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);
}
}
}
queue<int >q;
void bfs(int x) {
while(!q.empty()) {
q.pop();
}
q.push(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;
}
}
return 0;
}