#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define all(x) (x).begin(), (x).end() #define bit(x) (1 << (x)) #define cnt1(x) (__builtin_popcount(x)) #define LB lower_bound #define LET(it,v) __typeof(v) it(v) #define mset0(x) memset((x), 0, sizeof((x))) #define mset1(x) memset((x), -1, sizeof((x))) #define pb push_back #define PQ priority_queue #define REP(it,v) for(LET(it,v.begin());it!=v.end();it++) #define sqr(x) ((x)*(x)) #define sz(x) ((int)(x.size())) #define UB upper_bound #define X first #define Y second typedef long long LL; typedef double DB; typedef pair pii; typedef pair pll; typedef vector vi; typedef vector vpii; template inline void chkmin(T &a, T b) { if (b < a) a = b; } template inline void chkmax(T &a, T b) { if (a < b) a = b; } const int MX = 55; char s[MX][MX]; int n, m; int dx[] = {1, 0, -1, 0}; int dy[] = {0, 1, 0, -1}; bool in(int x, int y) { return (x >= 0 && x < n && y >= 0 && y < m && s[x][y] != '#'); } const double INF = 1e15; const double EPS = 1e-7; double rlt[MX][MX][MX]; struct Data { Data(){} Data(int x, int y, int k, double d):x(x), y(y), k(k), d(d){} int x, y, k; double d; }; bool operator <(const Data &a, const Data &b) { return a.d > b.d; } PQ Q; int main() { int T; int K; int i, j, k, sx, sy, ex, ey, x, y; for (scanf("%d", &T); T--; ) { scanf("%d%d%d", &n, &m, &K); for (i = 0; i < n; i++) { scanf("%s", s[i]); } scanf("%d%d%d%d", &sx, &sy, &ex, &ey); sx--, sy--, ex--, ey--; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { for (k = 0; k <= K; k++) rlt[i][j][k] = INF; } } while (!Q.empty()) Q.pop(); rlt[sx][sy][K] = 0; Q.push(Data(sx, sy, K, 0)); int flg = 0; Data dt; while (!Q.empty()) { dt = Q.top(); Q.pop(); x = dt.x, y = dt.y, k = dt.k; if (!k) continue; if (ex == x && ey == y) { flg = 1; break; } if (rlt[x][y][k] < dt.d - EPS) continue; for (int d = 0; d < 4; d++) { int tx = x + dx[d], ty = y + dy[d]; if (!in(tx, ty)) continue; double tp = fabs(1.0 * (s[x][y] - '0') - (s[tx][ty] - '0')) / k; double &ans = rlt[tx][ty][k - 1]; if (ans < rlt[x][y][k] + tp + EPS) continue; ans = rlt[x][y][k] + tp; Q.push(Data(tx, ty, k - 1, ans)); } } if (!flg) puts("No Answer"); else printf("%.2lf\n", dt.d); } return 0; }