每次到达一个点,或者点亮一个房间的灯的时候,检查一下它四周的点能否走。
一开始看错题了..要求的是最多能开多少房的灯。
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn=10023; 8 const int xx[4]={ 0,0,1,-1},yy[4]={ 1,-1,0,0}; 9 struct zs{ int too,pre;}e[20012];int tot,last[maxn];10 int dlx[maxn],dly[maxn];11 int id[103][103],X[maxn],Y[maxn];12 bool con[103][103],can[103][103];13 int i,j,k,n,m,l,r;14 int ans;15 16 int ra;char rx;17 inline int read(){18 rx=getchar(),ra=0;19 while(rx<'0'||rx>'9')rx=getchar();20 while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;21 }22 inline void insert(int a,int b){e[++tot].too=b,e[tot].pre=last[a],last[a]=tot;}23 inline void run(int nx,int ny){24 int x,y;25 for(int i=0;i<4;i++){26 x=nx+xx[i],y=ny+yy[i];27 if(x<1||y<1||x>n||y>n)continue;28 if(!con[x][y]&&can[x][y])r++,dlx[r]=x,dly[r]=y;29 con[x][y]=1;30 }31 }32 int main(){33 n=read(),m=read();int a,b,c,d,cnt=0;34 for(i=1;i<=n;i++)for(j=1;j<=n;j++)id[i][j]=++cnt,X[cnt]=i,Y[cnt]=j;35 for(i=1;i<=m;i++)a=read(),b=read(),c=read(),d=read(),insert(id[a][b],id[c][d]);36 l=0,r=1;37 dlx[1]=dly[1]=con[1][1]=can[1][1]=1;38 while(l