Pagini recente » Cod sursa (job #993828) | Cod sursa (job #726591)
Cod sursa(job #726591)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
int n,m,k,x,cnt,cheie[22505],lg;
bool viz[22505],uz[22505];
queue<int> q;
vector<int> acces[22505];
int main(){
int i,j;
f>>n>>m>>k;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
f>>cheie[++cnt];}
cnt=1;
viz[k]=uz[k]=1;
q.push(k);
while(!q.empty()){
x=q.front();
q.pop();
for(i=0;i<acces[x].size();i++){
cnt++;
viz[acces[x][i]]=1;
q.push(acces[x][i]);}
if((x+1)%m!=1&&!uz[x+1]){
uz[x+1]=1;
if(viz[cheie[x+1]]){
cnt++;
viz[x+1]=1;
q.push(x+1);}
else
acces[cheie[x+1]].push_back(x+1);}
if((x-1)%m&&!uz[x-1]){
uz[x-1]=1;
if(viz[cheie[x-1]]){
cnt++;
viz[x-1]=1;
q.push(x-1);}
else
acces[cheie[x-1]].push_back(x-1);}
if((x+m-1)/m<n&&!uz[x+m]){
uz[x+m]=1;
if(viz[cheie[x+m]]){
cnt++;
viz[x+m]=1;
q.push(x+m);}
else
acces[cheie[x+m]].push_back(x+m);}
if(x-m>0&&!uz[x-m]){
uz[x-m]=1;
if(viz[cheie[x-m]]){
cnt++;
viz[x-m]=1;
q.push(x-m);}
else
acces[cheie[x-m]].push_back(x-m);}}
g<<cnt;
f.close();
g.close();
return 0;}