2025.05.07
/*#include <stdio.h>
#include <stdlib.h>
int a[50000]={},b[50000]={};
int comp(int *pa,int *pb)
{
if(*pa>*pb)
{
return 1;
}
else
{
return 0;
}
}
int bs(int s,int e,int k)
{
int mid=(s+e)/2;
if(s>e)
{
return e+2;
}
if(b[mid]==k)
{
return mid;
}
else if(b[mid]<k)
{
return bs(mid+1,e,k);
}
else
{
return bs(s,mid-1,k);
}
}
int main()
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
qsort(b,n,sizeof(int),comp);
for(i=0;i<n;i++)
{
printf("%d ",bs(0,n-1,a[i]));
}
return 0;
}*/
/*
스택 or 재귀를 사용하는 dfs 방식
#include <stdio.h>
int graph[101][101]={};
int v[101]={};
int n;
void dfs(int x)// x 노드에서 갈 수 있는 모든 노드에 다녀오기 (x 노드에서 dfs 하기)
{
printf("%d->",x);
v[x]=1;
for(int i=1;i<=n;i++)
{
if(graph[x][i]==1 && v[i]==0)
{
dfs(i);
}
}
}
*/
// 레이더처럼 가까운 애들 다 보고 가는 bfs
#include <stdio.h>
int graph[101][101]={};
int v[101]={};
int n;
//큐 선언
int queue[101]={},front=-1,back=-1;
void bfs(int x)
{
printf("%d->",x);
v[x]=1;
for(int i=1;i<=n;i++)
{
if(graph[x][i]==1&&v[i]==0)
{
queue[++back]=x;
}
front++;
bfs(queue[front]);
}
return ;
}
int main()
{
int i,j,k,x,y;
scanf("%d %d",&n,&k);
for(i=0;i<k;i++)
{
scanf("%d %d",&x,&y);
graph[x][y]=1;
graph[y][x]=1;
}
bfs(1);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",graph[i][j]);
}
printf("\n");
}
}




