AOJ0558 チーズ
これほど汚いソースを見たことがない。
戒めのためにはります。
#include <cstdio> #include <queue> #include <cstdlib> using namespace std; int h,w,n; int nx,ny; int dx[] = {0,1,0,-1}; int dy[] = {1,0,-1,0}; int ans = 0; char m[1003][1003]; void search(int ty,int tx,char goal){ int goal2 = goal + '0'; bool ch[1002][1002] = {}; int sum = 0; queue<int> xx; queue<int> yy; xx.push(tx); yy.push(ty); ch[ty][tx] = true; while(xx.size()){ int sss = xx.size(); for(int ii = 0;ii < sss;ii++){ int xxx = xx.front(); xx.pop(); int yyy = yy.front(); yy.pop(); if(m[yyy][xxx] == goal2){ ans += sum; ny = yyy,nx = xxx; goto out; } for(int i = 0;i < 4;i++){ int fy = yyy + dy[i]; int fx = xxx + dx[i]; if(fy >= 0 && fy < h && fx >= 0 && fx < w && m[fy][fx] != 'X' && ch[fy][fx] == false){ yy.push(fy); xx.push(fx); ch[fy][fx] = true; } } } sum++; } out: ; } int main(){ scanf("%d%d%d",&h,&w,&n); for(int i = 0;i < h;i++){ scanf("%s",&m[i]); } for(int i = 0;i < h;i++){ for(int j = 0;j < w;j++){ if(m[i][j] == 'S'){ nx = j; ny = i; goto out; } } } out: ; for(int i = 1;i <= n;i++){ search(ny,nx,(char)i); } printf("%d\n",ans); return 0; }