using
System;
using
System.Collections.Generic;
class
GFG {
static
readonly
int
MAX = 100;
static
void
dfs(
int
n,
int
m,
bool
[, ] visit,
int
[, ] adj,
int
N,
int
M)
{
visit[n, m] =
true
;
if
(n + 1 < N && adj[n, m] >= adj[n + 1, m]
&& !visit[n + 1, m])
dfs(n + 1, m, visit, adj, N, M);
if
(m + 1 < M && adj[n, m] >= adj[n, m + 1]
&& !visit[n, m + 1])
dfs(n, m + 1, visit, adj, N, M);
if
(n - 1 >= 0 && adj[n, m] >= adj[n - 1, m]
&& !visit[n - 1, m])
dfs(n - 1, m, visit, adj, N, M);
if
(m - 1 >= 0 && adj[n, m] >= adj[n, m - 1]
&& !visit[n, m - 1])
dfs(n, m - 1, visit, adj, N, M);
}
static
void
printMinSources(
int
[, ] adj,
int
N,
int
M)
{
List<Tuple<
int
, Tuple<
int
,
int
> > > x
=
new
List<Tuple<
int
, Tuple<
int
,
int
> > >();
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < M; j++) {
x.Add(Tuple.Create(adj[i, j],
Tuple.Create(i, j)));
}
}
x.Sort();
bool
[, ] visit =
new
bool
[N, MAX];
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < MAX; j++)
visit[i, j] =
false
;
}
for
(
int
i = x.Count - 1; i >= 0; i--) {
if
(!visit[x[i].Item2.Item1,
x[i].Item2.Item2]) {
Console.WriteLine(
"{0} {1}"
,
x[i].Item2.Item1,
x[i].Item2.Item2);
dfs(x[i].Item2.Item1, x[i].Item2.Item2,
visit, adj, N, M);
}
}
}
static
void
Main(
string
[] args)
{
int
N = 2, M = 2;
int
[, ] adj = { { 3, 3 }, { 1, 1 } };
printMinSources(adj, N, M);
}
}