<div>근데 잘안되네요...</div> <div> </div> <div>flightDlg.h=====</div> <div>// flightDlg.h : 헤더 파일<br>//</div> <div><br>#pragma once<br>#include "afxwin.h"</div> <div><br>// CflightDlg 대화 상자<br>class CflightDlg : public CDialogEx<br>{<br>// 생성입니다.<br>public:<br> CflightDlg(CWnd* pParent = NULL); // 표준 생성자입니다.</div> <div>// 대화 상자 데이터입니다.<br>#ifdef AFX_DESIGN_TIME<br> enum { IDD = IDD_FLIGHT_DIALOG };<br>#endif</div> <div> protected:<br> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.</div> <div><br>// 구현입니다.<br>protected:<br> HICON m_hIcon;</div> <div> // 생성된 메시지 맵 함수<br> virtual BOOL OnInitDialog();<br> afx_msg void OnSysCommand(UINT nID, LPARAM lParam);<br> afx_msg void OnPaint();<br> afx_msg HCURSOR OnQueryDragIcon();<br> DECLARE_MESSAGE_MAP()<br>public:<br> CStatic m_imgBg;</div> <div> </div> <div>// afx_msg void OnBnClickedSearch();<br> void setup();<br> void assert_flight(char*, char* , int);<br> int match(char*, char* );<br> int find(char*, char*);<br> void push(char* , char* , int );<br> void pop(char* , char* , int* );<br> void isflight(char* , char*);<br> void route(char*);</div> <div>#define MAX 100 // db 크기 </div> <div> /* 비행 데이터베이스 구조 */<br> struct FL {<br> char from[20];<br> char to[20];<br> int distance;<br> char skip; // 백트랙킹을 위해 사용됨 <br> <br> };</div> <div> struct FL flight[MAX]; // db 구성</div> <div> /* 스택 구조 */<br> struct stack {<br> char from[20];<br> char to[20];<br> int dist;<br> };</div> <div> struct stack bt_stack[MAX]; // 백트랙킹을 위한 스택 <br> int f_pos = 0; // 비행 db 안에 있는 자료 위치값 <br> int find_pos = 0; // 비행 db안에서의 탐색용 인덱스<br> int tos = 0; // 스택용 포인터로 항상 스택의 top을 가리킴 </div> <div><br> afx_msg void OnBnClickedSearch();<br>};<br></div> <div> </div> <div> </div> <div>===========dlg.cpp</div> <div> </div> <div> </div> <div>void CflightDlg::setup()<br>{<br> assert_flight("뉴욕", "시카고", 1000);<br> assert_flight("시카고", "덴버", 1000);<br> assert_flight("뉴욕", "토론토", 800);<br> assert_flight("뉴욕", "덴버", 1900);<br> assert_flight("토론토", "캘거리", 1500);<br> assert_flight("토론토", "로스엔젤리스", 1800);<br> assert_flight("토론토", "시카고", 500);<br> assert_flight("덴버", "우르바나", 1000);<br> assert_flight("덴버", "휴스톤", 1500);<br> assert_flight("휴스톤", "로스엔젤리스", 1500);<br> assert_flight("덴버", "로스엔젤리스", 1000);</div> <div>}</div> <div> </div> <div>void CflightDlg::assert_flight(char* from, char* to, int dist)<br>{<br> if (f_pos<MAX) {<br> strcpy(flight[f_pos].from, from);<br> strcpy(flight[f_pos].to, to);<br> flight[f_pos].distance = dist; // 거리 저장 하기<br> flight[f_pos].skip = 0;<br> f_pos++; //지식베이스 인덱스 증가<br> }<br> else printf("flight database full.\n");<br>}</div> <div> </div> <div>int CflightDlg::match(char* from, char* to)<br>{<br> CString str;<br> register int t;</div> <div> for (t = f_pos - 1; t > -1; t--)<br> {<br> if (!strcmp(flight[t].from, from) && !strcmp(flight[t].to, to))<br> {<br> return flight[t].distance;<br> // 비행경로 발견시 거리 린턴</div> <div> }<br> return 0;</div> <div> }</div> <div>}</div> <div><br>int CflightDlg::find(char* from, char* anywhere)<br>{<br> find_pos = 0;<br> while (find_pos<f_pos) { //f_pos : kdb 인덱스<br> if (!strcmp(flight[find_pos].from, from) && !flight[find_pos].skip)<br> {<br> strcpy(anywhere, flight[find_pos].to);<br> flight[find_pos].skip = 1; /*make active */<br> return flight[find_pos].distance;<br> }<br> find_pos++;<br> }</div> <div> return 0;/* 발견되지 않음 */</div> <div>}</div> <div> </div> <div>void CflightDlg::push(char* from, char* to, int dist)<br>{<br> if (tos<MAX) { // tos : 전역변수,초기값 0<br> strcpy(bt_stack[tos].from, from);<br> strcpy(bt_stack[tos].to, to);<br> bt_stack[tos].dist = dist;<br> tos++; //스택포인터 증가<br> }<br> else printf("스택가득참.\n");<br>}</div> <div><br>void CflightDlg::pop(char* from, char* to, int* dist)<br>{<br> if (tos>0) {<br> tos--;<br> strcpy(from, bt_stack[tos].from);<br> strcpy(to, bt_stack[tos].to);<br> *dist = bt_stack[tos].dist;<br> }<br> else printf("스택공간 부족.\n");<br>}</div> <div><br>void CflightDlg::isflight(char* from, char* to)<br>{<br> CString str;<br> int d, dist; char anywhere[20];<br> /* 목적지인지 조사 */<br> if (d = match(from, to)) { // from – to 도시간 경로 있으면 거리 리턴<br> push(from, to, d); // d는 from 도시에서 최종목적기간 거리<br> return;<br> }<br> /* 다른 도시로의 연결 편 조사 */<br> if (dist = find(from, anywhere)) {<br> push(from, to, dist); // 현재도시, 목적지, 현재 - 임의도시 거리 보관<br> isflight(anywhere, to); // 임의의 도시에서 목적지간 경로 찾기<br> <br><br> <br> }<br> else if (tos>0) { /* backtrack */<br> pop(from, to, &dist);<br> isflight(from, to);<br> }</div> <div><br> <br>}</div> <div><br>void CflightDlg::route(char* to)<br>{<br> CString str;<br> int dist, t;</div> <div> dist = 0;<br> t = 0;<br> while (t < tos) {<br> printf("%s => ", bt_stack[t].from);<br> dist += bt_stack[t].dist;<br> t++;<br> <br> }<br> </div><font face="Arial Black" size="2"> </font><div> UpdateData(FALSE);<br> str.Format(_T("비행거리는 %d입니다"), dist);<br> SetDlgItemText(IDC_EDIT1, str);</div> <div style="text-align:left;"> </div> <div>}</div> <div><br>void CflightDlg::OnBnClickedSearch()<br>{<br> // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.<br> CString str,to1, from1;</div> <div> // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.<br> setup();<br> UpdateData(TRUE);<br> GetDlgItemText(IDC_START, from1);<br> GetDlgItemText(IDC_END, to1);</div> <div> <br> char from[20], to[20];<br> <br> strcpy_s(from, 20, CT2A(from1)); //하.. 내가이거떔에 개고생을..형변환 string->char<br> strcpy_s(to, 20, CT2A(to1));<br> //from1.Format(_T("%s"), from);<br> //AfxMessageBox(from1);</div> <div><br> isflight(from, to); // 비행경로 탐색 함수 호출 <br> route(to); // 발견된 비행경로 및 거리 출력 함수 호출<br> </div> <div>}</div> <div>c언어 소스를 </div> <div>그대로 들고와서 </div> <div>약간 수정을하여 만들고있습니다.</div> <div> </div> <div>버튼을 누르면 </div> <div>시작하는 곳과 도착지점에 거리를 계산해서 출력해줘야하는데..</div> <div>시작점위치만 계산되고 출력되어버립니다.</div> <div>C언어 소스는 이상이없구요.</div> <div> </div> <div>UpdateData(FALSE);<br> str.Format(_T("비행거리는 %d입니다"), dist);<br> SetDlgItemText(IDC_EDIT1, str);</div> <div> </div> <div>이소스 위치를 바꿔야하나요? 다른곳에 바꿔도안되서요..ㅠ</div> <div>실행화면 입니다.</div> <div><img width="558" height="379" style="border:;" alt="캡처.JPG" src="http://thimg.todayhumor.co.kr/upfile/201611/1480237513134eda32c8e847fc8f48c21c5fa5fb56__mn100777__w558__h379__f17579__Ym201611.jpg" filesize="17579"></div> <div>뉴욕-시카고는</div> <div>void CflightDlg::setup()<br>{<br> assert_flight("뉴욕", "시카고", 1000);<br> assert_flight("시카고", "덴버", 1000);<br> assert_flight("뉴욕", "토론토", 800);<br> assert_flight("뉴욕", "덴버", 1900);<br> assert_flight("토론토", "캘거리", 1500);<br> assert_flight("토론토", "로스엔젤리스", 1800);<br> assert_flight("토론토", "시카고", 500);<br> assert_flight("덴버", "우르바나", 1000);<br> assert_flight("덴버", "휴스톤", 1500);<br> assert_flight("휴스톤", "로스엔젤리스", 1500);<br> assert_flight("덴버", "로스엔젤리스", 1000);</div> <div>}</div> <div>에 의해서 1000이 맞지만</div> <div> </div> <div>뉴욕- 토론토 해도 1000이 나옵니다 ㅠ</div> <div> </div><br>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.