어떤 곳을 지나갈때 1이라고 써있는곳은 에너지 1 깎으면서 도착지 까지 가는건데 이상함;;
참고로 시작은 3, 도착은 4
#include <fstream>
using namespace std;
FILE *fin=fopen(\"input.txt\", \"r\");
FILE *fout=fopen(\"output.txt\", \"w\");
int n, m, k, s1, s2, e1, e2, f, r, row, col, q[2][1000010], d[1010][1010];
int main()
{
int i, j;
fscanf(fin, \"%d %d\\n%d\", &m, &n, &k);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
fscanf(fin, \"%d\", &d[i][j]);
if(d[i][j]==3) { s1=i; s2=j; }
if(d[i][j]==4) { e1=i; e2=j; }
}
}
f=0;
r=1;
q[0][1]=s1;
q[1][1]=s2;
d[s1][s2]=k;
d[e1][e2]=0;
while(f<r)
{
row=q[0][++f];
col=q[1][f];
if(row==e1 && col==e2) break;
if(row<m && d[row+1][col]==0)
{
q[0][++r]=row+1;
q[1][r]=col;
if(d[row+1][col]==1)d[row+1][col]=d[row][col]-1;
else if(d[row+1][col]==0)d[row+1][col]=d[row][col];
}
if(row>1 && d[row-1][col]==0)
{
q[0][++r]=row-1;
q[1][r]=col;
if(d[row-1][col]==1)d[row-1][col]=d[row][col]-1;
else if(d[row-1][col]==0)d[row-1][col]=d[row][col];
}
if(col<n && d[row][col+1]==0)
{
q[0][++r]=row;
q[1][r]=col+1;
if(d[row][col+1]==1)d[row][col+1]=d[row][col]-1;
else if(d[row][col+1]==0)d[row][col+1]=d[row][col];
}
if(col>1 && d[row][col-1]==0)
{
q[0][++r]=row;
q[1][r]=col-1;
if(d[row][col-1]==1)d[row][col-1]=d[row][col]-1;
else if(d[row][col-1]==0)d[row][col-1]=d[row][col];
}
}
if(d[e1][e2])
fprintf(fout, \"1\\n%d\", d[e1][e2]);
else
fprintf(fout, \"0\");
fcloseall();
return 0;
}
아오
헐