ROUTING 연습 문제
라우팅 문제를 푸는데, 오답으로 처리가 됩니다.
혹시 어떤부분에서 오답처리가 되는지 도움을 주실 수 있으신가요 ?
자료구조 : vector를 이용하여 인접리스트를 만들었습니다.
알고리즘 : vector로 만든 인접리스트를 기반으로
DFS를 수행합니다.
A노드에서 B노드로 갈 때, 가중치만큼 값이 곱해집니다.
그리고 해당 값은 stack에 저장합니다.
B가 더이상 유망하지 않다면 해당 값은 pop해줍니다.
최초로 목적지까지 도착했을 때 값을 MIN으로 놔두고
길목을 탐색할때마다 MIN보다 커질거 같으면 유망하지
않다고 판단하고 탐색하지 않습니다. 이렇게 최종적으로
가장 작은 값만 갖고있게되고, 해당 값을 출력해줍니다.
무엇이 문제인지 도와주시면 감사하겠습니다 !
#include <stdio.h>#include <iostream>#include <stack>#include <vector>#include <stdlib.h>usingnamespacestd;intN;// 노드 수intvertex;//간선의 수intvisit[10001]={0,};longdoubleres=1;// 결과값longdoubleMIN_res=1.7976931348623158e+308;vector<longdouble>arr[10001];stack<longdouble>s;stack<longdouble>s_val;//값 비교용 stack/// 인접리스트 생성/// 추가사항: 양방향 그래프 될 수 있도록 해주고, ( O ) /// 자료형 double로 바꿔준다. ( O )voidinput(){intnode_a;intnode_b;longdoubleval;for(inti=0;i<vertex;i++){cin>>node_a>>node_b>>val;arr[node_a].push_back(node_b);arr[node_b].push_back(node_a);arr[node_a].push_back(val);arr[node_b].push_back(val);}}voidDFS(intstart){if(start==N-1){// 마지막노드에 도착하였다면.MIN_res=s_val.top();//마지막노드까지 왔다는 것은, 최소의 값이라는 것을 의미하므로. s_val.pop();return;}//들어오는 값 스택에 넣어주고s.push(start);// visit 해준다.visit[start]=1;inttemp_node=0;for(inti=0;i<arr[start].size();i+=2){temp_node=arr[start][i];// 다음으로 갈 노드 if(!visit[temp_node]&&(s_val.top()*arr[start][i+1])<MIN_res){// 방문하지 않았고, 방문하지 않았다 하더라도 곱했을 경우 최소증폭보다 값이 크다면 Xres=s_val.top()*arr[start][i+1];s_val.push(res);DFS(temp_node);}}// 더이상 갈 곳이 없을때에는 pop해주려는 부분에 대해 visit 초기화 시켜주고, pop해준다.inttemp=0;temp=s.top();visit[temp]=0;s.pop();s_val.pop();}/// 초기화 함수voidinit(){MIN_res=1000000;for(inti=0;i<N;i++){visit[i]=0;}// vector에서 사용한 동적메모리 해제for(inti=0;i<N;i++){arr[i].clear();}}voidTest();intmain(){/// TestCase 입력intTestCase=0;//freopen("in.txt", "r", stdin);cin>>TestCase;for(inti=0;i<TestCase;i++){/// 노드 수 입력cin>>N;/// 간선의 수 입력cin>>vertex;/// 간선정보 입력input();// Start : 0 , End : N-1 번/// DFS s_val.push(1);// 처음에 value 1 넣어주고 시작.DFS(0);cout.setf(ios::fixed);cout.precision(10);cout<<MIN_res<<endl;init();}return0;}/// Just TestvoidTest(){// 인접리스트 출력for(inti=0;i<vertex;i++){cout<<"시작:"<<i<<" ";for(intj=0;j<arr[i].size();j+=2){cout<<" 정점:"<<arr[i][j]<<" "<<" 값:"<<arr[i][j+1]<<"/";}cout<<endl;}}{{AD60Qx4D4IZyVpC0}}
8년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면
온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야
합니다. 현재 문제를 푸셨습니다.
sujae03
ROUTING
연습 문제
라우팅 문제를 푸는데, 오답으로 처리가 됩니다.
혹시 어떤부분에서 오답처리가 되는지 도움을 주실 수 있으신가요 ?
자료구조 : vector를 이용하여 인접리스트를 만들었습니다.
알고리즘 : vector로 만든 인접리스트를 기반으로
DFS를 수행합니다.
A노드에서 B노드로 갈 때, 가중치만큼 값이 곱해집니다.
그리고 해당 값은 stack에 저장합니다.
B가 더이상 유망하지 않다면 해당 값은 pop해줍니다.
최초로 목적지까지 도착했을 때 값을 MIN으로 놔두고
길목을 탐색할때마다 MIN보다 커질거 같으면 유망하지
않다고 판단하고 탐색하지 않습니다. 이렇게 최종적으로
가장 작은 값만 갖고있게되고, 해당 값을 출력해줍니다.
무엇이 문제인지 도와주시면 감사하겠습니다 !
8년 전
0개의 댓글이 있습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.