[C言語]標準1260:DFSとBFS
https://www.youtube.com/watch?v=rand1XTwEnE&ab_channel=%EC%BD%94%EB%8D%B0%ED%92%80
この人は気が狂って、よく理解しています.
まず、BFSはまだ見ていません.避難が終わった後に行われるでしょう
本当は勉強してからストーカー部分を隠したかったのですが、後ストーカーでDFSを使う部分があったので後ろに回されました.
しかしDFSをするにはスタックを知る必要があり、幸いこの部分は今日問題をしました.偶然です.
BFSを行うにはキューの概念を知る必要がありますが、キューはC言語では非常に不利だそうです.だから私はC++かノードを選びましたjsをやるときは一緒にやるはずです
コード#コード#
#include <iostream>
#include <stdio.h>
#include <queue>
#include <memory.h>
#include <algorithm>
using namespace std;
int arr[1001][1001];
int visit[1001];
int N, M, V;
int u, v;
void dfs(int x) // 재귀 dfs
{
int i = 0;
visit[x] = 1; // 방문 표시
printf("%d ", x); // 방문한 점 출력
for (i = 1; i <= N; i++)
if (arr[x][i] == 1 && visit[i] == 0)
{
dfs(i);
}
if (i == N) return; // i가 N개의 모든 점을 검사했다면 반환
}
/*
void bfs(int x)
{
queue<int> q; // 큐 생성
int i = 0;
q.push(x); // 시작점 큐에 삽입
while (!q.empty()) // 큐에 원소가 하나도 없을 시 탈출
{
int next_x = q.front(); // 큐 맨앞의 원소를 다음 탐색할 점으로 지정
visit[next_x] = 1; // 방문 표시
printf("%d ", next_x); // 방문 한 점 출력
q.pop(); // 큐 맨 앞 데이터 삭제
for (i = 1; i <= N; i++)
if (arr[next_x][i] == 1 && visit[i] == 0)
{
//next_x점과 i점이 연결되어있고 i점은 방문기록이 없다면
q.push(i); // 큐에 i점 삽입
visit[i] = 1; // i점은 미리 방문표시(미리 하지 않으면 중복으로 방문할 수도 있음)
}
}
}
*/
int main()
{
scanf("%d %d %d", &N, &M, &V);
for (int i = 0; i < M; i++)
{
scanf("%d %d", &u, &v);
// arr = 각 점의 연결 정보를 알려주는 행렬
arr[u][v] = 1;
arr[v][u] = 1;
}
dfs(V);
/*
printf("\n");
memset(visit, 0, sizeof(visit)); // 방문기록 초기화
bfs(V);
*/
}
https://cocoon1787.tistory.com/148 私は彼を見たことがあります.
最初は、なぜ2次元配列に1を入れるのか、どのように戻ってくるのかよく分かりませんでしたが、ビデオを見てから分かりました.
別の書類を提出しましたが、こちらは詳しく整理されています
配列が回転するにつれて、2次元配列では1に初期化された箇所だけが1つずつ入ってきて、このような状況が逆転した.また、訪れた場所は1に変更され、訪れていない場所にのみ入ります.
時間があまりなくて、DFSを主として、後で帰って勉強します.
Reference
この問題について([C言語]標準1260:DFSとBFS), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-1260-DFS와-BFSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol