1341: 한 획 의 그림 문제
1924 단어 데이터 구조
만약 에 그림 에 한 획 이 존재 한다 면 한 획 의 경 로 는 오로라 로 라 고 하고 마지막 에 다시 출발점 으로 돌아간다 면 이 경 로 는 오로라 로 라 고 한다.
한 획 의 두 가지 정리 에 따 르 면 오 라 회 로 를 찾 으 면 임의의 점 에 대해 깊이 를 우선 적 으로 옮 겨 다 닌 다.오로라 로 를 찾 으 면 하나의 기이 한 점 에 대해 dfs 를 실행 합 니 다. 시간 복잡 도 는 O (m + n) 이 고 m 는 변수 이 며 n 은 포인트 입 니 다.
【 입력 】
첫 번 째 줄 n, m, n 개의 점, m 개의 변 이 있 고 아래 m 줄 은 각 변 이 연 결 된 두 점 을 설명 합 니 다.
【 출력 】
오 라 로 나 오 라 회 로 는 하나의 경 로 를 출력 하면 된다.
[샘플 입력]
5 5
1 2
2 3
3 4
4 5
5 1
[출력 사례]
1 5 4 3 2 1
사실 이 문 제 는 간단 하지만 처음에 나 는 이 문제 의 뜻 이 무엇 인지 이해 하기 어려워 서 시간 을 들 여 뜻 을 이해 했다.
사실 그림 의 옮 겨 다 니 는 것 은 앞의 dfs 와 bfs 의 차이 가 많 지 않다.
이 문제 와 그림 은 dfs bfs 에 많이 쓰 여 져 있 습 니 다. 다 써 봤 습 니 다.
알 아야 할 지식:
정리 1: 오로라 로 가 존재 하 는 조건: 그림 은 연결 되 어 있 고 두 개의 기이 한 점 만 있다.정리 2: 오로라 회로 가 존재 하 는 조건: 그림 은 연결 되 어 있 고 0 개의 기이 한 점 이 있다.
이 문 제 는 뒤의 승마 울타리 와 같은 유형의 문제 이기 때문에 이것 은 기초 문제 입 니 다. 이 dfs 기록 경 로 는 처음에 재 귀 적 인 역 추적 으로 인해 발생 한 것 입 니 다. 처음에 재 귀 를 스 택 으로 이해 하고 선진 적 인 후에 이 를 처리 할 수 있 습 니 다. 이 num 은 바로 이 렇 습 니 다.
먼저 기이 한 점 을 찾 아, 있 으 면 오로라 경로 임 을 설명 하고, 없 으 면 오로라 회로 임 을 설명 하 며, 오로라 경로 라면 기이 한 점 부터 시작 하고, 오로라 회로 라면 어디든지 검색 할 수 있다.
#include
using namespace std;
int mapp[1005][1005];
int n,m;
int s[105];
int c=0;
int num[2005];
void dfs(int i){
for(int j=1;j<=n;j++){
if(mapp[i][j]==1){
mapp[i][j]=mapp[j][i]=0;
dfs(j);
}
}
num[++c]=i;
}
int main()
{
memset(mapp,0,sizeof(mapp));
cin>>n>>m;
int a,b;
for(int i=1;i<=m;i++){
cin>>a>>b;
mapp[a][b]=mapp[b][a]=1;
s[a]++;
s[b]++;
}
int flag=1;
for(int i=1;i<=n;i++){
if(s[i]%2==1){
flag=i;
}
}
dfs(flag);
for(int i=1;i<=c;i++){
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.