#pragma warning(disable:4996)
#include <iostream>
#include <vector>
#include <queue>
#include "stdio.h"
using namespace std;
int map[100][100] = { 0, };
int chk[100][100] = { 0, };
int bogeup[100][100] = { 0, };//복구시간
int dirX[4] = { 1,-1,0,0 };// 동서남북
int dirY[4] = { 0,0,-1,1 };
int iSize;
void BFS(int a, int b)
{
queue<pair<int, int>> qContainer;
chk[a][b] = 1;//방문기록 남기고
qContainer.push(make_pair(a, b));
while (!qContainer.empty())
{
int x = qContainer.front().first;
int y = qContainer.front().second;
qContainer.pop();
for (int i = 0; i < 4; i++)
{
int nx = x + dirX[i];
int ny = y + dirY[i];
if (nx >= 0 && ny >= 0 && nx < iSize && ny < iSize)
{
if ((chk[nx][ny] == 0) || (bogeup[nx][ny]>bogeup[x][y]+map[nx][ny]))//방문안했거나
{
qContainer.push(make_pair(nx, ny));
chk[nx][ny] = 1;
bogeup[nx][ny] = bogeup[x][y] + map[nx][ny];//보급로 값 업데이트
}
}
}
}
}
void init()
{
for (int i = 0; i < iSize; i++)
{
for (int j = 0; j < iSize; j++)
{
map[i][j] = 0;
chk[i][j] = 0;
bogeup[i][j] = 0;
}
}
}
int main()
{
int testcase;
cin >> testcase;
for (int i = 0; i < testcase; i++)
{
cin >> iSize;
for (int j = 0; j < iSize; j++)
{
for (int k = 0; k < iSize; k++)
{
scanf("%1d", &map[j][k]);
}
}
BFS(0, 0);
cout << "#" << i + 1 << " " << bogeup[iSize - 1][iSize - 1];//마지막 배열
init();
}
}
이문제 풀 때
4
0100
1110
1011
1010
입력이 이런식으로 들어오는데,
1]
cin>> 말고
scanf("%1d",&map[j][k])
이런식으로 받아야 한자씩 받아진다.
2]
if ((chk[nx][ny] == 0) || (bogeup[nx][ny]>bogeup[x][y]+map[nx][ny]))//방문안했거나 보급로 값을 업데이트 할 경우 조건문을 이런식으로 써야함.