응애맘마조
진짜 사람 찾기 본문
몇 번 사람이 몇 명을 알고 그 번호의 사람을 메모장에 표시하는 과제였습니다.
#include <iostream>
#include <fstream>
#include <chrono>
#include <vector>
#include <list>
using namespace std;
struct Human
{
int id;
int knowNum;
int* realHuman;
bool check = false;
void Print()
{
cout << "id :" << id << "\t";
cout << "knowNum :" << knowNum << "\t";
for (int i = 0; i < knowNum; i++)
cout << "realHuman :" << realHuman[i] << "\t";
cout << endl;
}
};
int main()
{
std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
ifstream fin;
fin.open("마을2.txt", ios::in);
int villageSize;
fin >> villageSize;
Human* village = new Human[villageSize + 1];
for (int i = 1; i < villageSize + 1; i++)
{
fin >> village[i].id;
fin >> village[i].knowNum;
village[i].realHuman = new int[village[i].knowNum];
for (int j = 0; j < village[i].knowNum; j++)
{
fin >> village[i].realHuman[j];
}
}
list<int> findlist;
village[1].check = true;
findlist.push_back(1);
while (not findlist.empty())
{
int id = findlist.front();
for (int i = 0; i < village[id].knowNum; i++)
{
int idx = village[id].realHuman[i];
if (not village[idx].check)
{
findlist.push_back(idx);
village[idx].check = true;
}
}
findlist.pop_front();
}
int count = 0;
for (int i = 1; i < villageSize + 1; i++)
{
if (village[i].check)count++;
}
std::chrono::duration<double>sec = std::chrono::system_clock::now() - start;
cout << "마을1:" << count << "명 실행시간:" << sec.count() << "초" << endl;
}
코드입니다.
그럼 메모장에 이런 형식으로 나오게 됩니다.
읽어주셔서 감사합니다.
'공부 > 3D과제' 카테고리의 다른 글
전위, 중위, 후위 노드 추가 탐색 및 삭제 (0) | 2023.05.01 |
---|---|
이진탐색트리, DFS, BFS, (전위, 중위, 후위) 순회 (0) | 2023.04.27 |
하노이의 탑 (0) | 2023.04.26 |
추가 및 삭제 (0) | 2023.04.25 |
마이크로프로세서, CPU, 메모리, 레지스터, 캐시 (0) | 2023.04.19 |