I can not find a reason as to why I am getting a SIGABRT error in this code. The constraints are n,m<=100. Can someone please help?
Lucius Dungeon http://www.spoj.com/problems/BYTESE1/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef pair<int,int> ii;
vector<ii> graph[10005];
int C[105][105];
int D[10005];
int n,m;
set<ii> S;
void dijkstra(int st)
{
S.insert(ii(C[0][0],st));
ii top;
int u,v,c,i;
D[st]=C[0][0];
while(!S.empty())
{
top = *S.begin();
S.erase(S.begin());
c = top.f;
u = top.s;
for(i=0;i<graph[u].size();i++)
{
ii x = graph[u][i];
v = x.f;
if(D[v]>=D[u]+x.s)
{
if(D[v]!=1e7)
S.erase(S.find(ii(D[v],v)));
D[v]=D[u]+x.s;
S.insert(ii(D[v],v));
}
}
}
}
int main(int argc, const char * argv[])
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int i,j,t,u,k,l,a,b,T,d;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>C[i][j];
cin>>a>>b>>T;
a--;
b--;
for(i=0;i<m*n+1;i++)
{
graph[i].clear();
D[i]=1e7;
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
u = i*m + j;
for(k=max(i-1,0);k<=min(i+1,n-1);k++)
{
if(k==i)
continue;
graph[u].pb(ii(k*m+j,C[k][j]));
}
for(l=max(j-1,0);l<=min(j+1,m-1);l++)
{
if(l==j)
continue;
graph[u].pb(ii(i*m+l,C[i][l]));
}
}
}
dijkstra(0);
d = D[a*m + b];
if(d<=T)
{
cout<<"YES\n";
cout<<T-d<<"\n";
}
else
cout<<"NO\n";
}
return 0;
}