본문 바로가기
카테고리 없음

4차 도로건설 완성 코드

by 문자메일 2019. 2. 24.

bfs는 테케 10개 전부 통과하는데, dfs는 테케 7부터 타임오버 나옴


#include <iostream>

#include <queue>

#include <stack>


using namespace std;


class POS{

public:

int r,c;

};


#define INF (1<<29)

int N;//지도 크기

char map[110][110];//지도 정보

int visit[110][110];


int dir[4][2] = {{-1,0}, {0,1}, {1,0}, {0,-1}};


void Input_Data(){

cin >> N;

for (int i = 0; i < N; i++){

cin >> map[i];

}

}

/*

void bfs(){

queue<POS> q;

POS pos;

for(int i=0; i<N; i++)

for(int j=0; j<N; j++)

visit[i][j] = INF;

visit[0][0] = 0;

pos.r = 0; pos.c = 0;

q.push(pos);

while(!q.empty()){

POS curPos = q.front();

q.pop();

for(int i=0; i<4; i++){

POS nextPos;

nextPos.r = curPos.r + dir[i][0];

nextPos.c = curPos.c + dir[i][1];

if(nextPos.r < 0 || nextPos.r >=N || nextPos.c < 0 || nextPos.c >= N){continue;}

if(visit[nextPos.r][nextPos.c] > visit[curPos.r][curPos.c] + map[nextPos.r][nextPos.c] -'0'){

visit[nextPos.r][nextPos.c] = visit[curPos.r][curPos.c] + map[nextPos.r][nextPos.c] -'0';

q.push(nextPos);

}

}

}

}

*/


void dfs(){

stack<POS> s;

POS pos;

for(int i=0; i<N; i++)

for(int j=0; j<N; j++)

visit[i][j] = INF;

visit[0][0] = 0;

pos.r = 0; pos.c = 0;

s.push(pos);

while(!s.empty()){

POS curPos = s.top();

s.pop();

for(int i=0; i<4; i++){

POS nextPos;

nextPos.r = curPos.r + dir[i][0];

nextPos.c = curPos.c + dir[i][1];

if(nextPos.r < 0 || nextPos.r >=N || nextPos.c < 0 || nextPos.c >= N){continue;}

if(visit[nextPos.r][nextPos.c] > visit[curPos.r][curPos.c] + map[nextPos.r][nextPos.c] -'0'){

visit[nextPos.r][nextPos.c] = visit[curPos.r][curPos.c] + map[nextPos.r][nextPos.c] -'0';

s.push(nextPos);

}

}

}

}



int main(){

int ans = -1;

Input_Data(); // 입력 함수


// 코드를 작성하세요

dfs();

//bfs();

ans = visit[N-1][N-1];

cout << ans << endl; // 정답 출력

return 0;

}



댓글