== 느낀점 및 설명 == 끙..;; 처음에 문제를 보고 C++로 자료구조를 만들어서 해보자는 생각으로 했지만.. 왠지 더 복잡해진듯 하다~! @.@ 메모리를 좀 낭비하더라도 중복을 줄여서, 양이 많아질때의 연산을 줄여보자는 생각이었지만.. 생각해보니 많아지면 그게 그거라는..후후후... ...난 뭐한거지..;; 어쨋든 책마다의 저자를 연결하는 자료구조 하나.. 책 저자의 자료구조 하나.. 이렇게 두개를 만들어서 나름대로는 연산이 쪼~~~끔 줄었다고 말하고 싶지만.. 다만들고 나니 그것도 아닐지도..훗.. 괜한 고생이었나..;; == 소스 == === main.cpp === {{{~cpp #include #include "class.h" using namespace std; char TARGET_NAME[]="Erdos, P."; void main() { int simulation; cout << "시뮬레이션 횟수를 입력하십시오.\n>>"; cin >> simulation; for (;simulation>0;--simulation) { data_manager* datas=new data_manager(); int number_books, number_writers; char temp[256]; cout << "논문의 수와 탐색할 저자의 수를 입력하십시오.\n>>"; cin >> number_books >> number_writers; cout << "논문의 저자와 제목을 입력하세요.\n"; for (int i=0; iswallow(temp); } datas->process_erdos_number(TARGET_NAME); cout << "찾을 저자의 이름을 입력하세요.\n"; for (int i=0; iget_score(temp); if (score!=0) cout << temp << " " << score << "\n"; else if (-1!=score) cout << temp << " infinity\n"; else cout << "저자를 찾을 수 없습니다.\n"; } delete datas; } } }}} === class.h === {{{~cpp #define NULL 0 class human_data{ private: char* names; int score; int tuched; int number_line; int* line_numbers; void str_copy(char**, char*); public: human_data(char* ); ~human_data(); void input_line(int ); void change_score(int ); void get_passive(); int get_score(); char* get_name(); int get_number_line(); int get_line_number(int ); int get_tuched(); }; class line_data{ private: human_data* include_data; line_data* prv; line_data* next; public: line_data(human_data* , line_data* ); ~line_data(); void link(line_data* ); human_data* get_data(); line_data* get_next(); }; class data_manager{ private: int number_mans, number_books; human_data** mans; line_data** books; void creat_book(); void creat_man(char* ); int str_cmp(char* , char* ); int such_man(char* ); void str_swallow(char* ); public: data_manager(); ~data_manager(); void swallow(char* ); void process_erdos_number(human_data* ); void process_erdos_number(char* ); int get_score(char* ); }; }}} === class.cpp === {{{~cpp #include "class.h" void human_data::str_copy(char** target, char* original) { register int i=0; while (0!=original[i]) ++i; *target=new char[i+1]; for (register int j=0; j<=i; ++j) (*target)[j]=original[j]; } human_data::human_data(char* input_names) { str_copy(&names,input_names); score=0; tuched=0; number_line=0; line_numbers=NULL; } human_data::~human_data() { if (NULL!=names) delete names; if (line_numbers!=NULL) delete line_numbers; } void human_data::input_line(int input_line_number) { int* temp_numbers=new int[number_line+1]; for (register int i=0; ilink(this); next=NULL; } line_data::~line_data() { if (NULL!=next) delete next; if (NULL!=prv) delete prv; } void line_data::link(line_data* input_next) { next=input_next; } human_data* line_data::get_data() { return include_data; } line_data* line_data::get_next() { return next; } void data_manager::creat_book() { line_data** temp_books=new line_data*[number_books+1]; for (register int i=0; iget_name())) return i; } return -1; } void data_manager::str_swallow(char* tagert_line) { human_data* temp_human; int temp_man_number=such_man(tagert_line); if (-1==temp_man_number) { creat_man(tagert_line); temp_human=mans[number_mans-1]; } else temp_human=mans[temp_man_number]; temp_human->input_line(number_books-1); line_data* temp_book=books[number_books-1]; if (NULL==temp_book) { books[number_books-1]=new line_data(temp_human,NULL); } else { while (NULL!=temp_book->get_next()) temp_book=temp_book->get_next(); new line_data(temp_human,temp_book); } } data_manager::data_manager() { number_mans=0; number_books=0; mans=NULL; books=NULL; } data_manager::~data_manager() { for (register int i=0; iget_number_line(); for (register int i=0; iget_line_number(i)]; while (NULL!=temp_book) { if (temp_book->get_data()->get_score()>target_man->get_score()+1 || 0==temp_book->get_data()->get_tuched()) { temp_book->get_data()->change_score(target_man->get_score()+1); process_erdos_number(temp_book->get_data()); } temp_book=temp_book->get_next(); } } } void data_manager::process_erdos_number(char* target_name) { int target_man_number=such_man(target_name); if (-1!=target_man_number) { mans[target_man_number]->get_passive(); process_erdos_number(mans[target_man_number]); } } int data_manager::get_score(char* target_name) { int temp_target_number=such_man(target_name); if (-1==temp_target_number) return -1; return mans[temp_target_number]->get_score(); } }}} == 저에게 할말 == ---- [AOI] [ErdosNumbers]