top表示的是正方形的编号
by issue_is_fw @ 2020-08-18 23:32:27
感觉思路没啥问题
但你的top向外连边了吗(雾
by 清平乐 @ 2020-08-19 08:20:32
感觉你的代码连出来的图长这样了
![](https://cdn.luogu.com.cn/upload/image_hosting/ehwyfv0t.png)
by 清平乐 @ 2020-08-19 08:25:30
@[清平乐](/user/224358)
啊,这句就是向外连边呀
```
add(top,xia,1,0);
```
因为每行最左边的格子去正下方是没有正方形限制的
所以只需要
```
if( j==1 )
{
add(now,xia,1,a[i+1][j] );//去下一行最左边没限制
add(now,++top,1,a[i+1][j+1] );
//去右下方有限制,新开一个正方形
}
```
每行最右边去右下方没限制(因为最右边了),去左下方有限制
```
else if( j==m+i-1 )
{
add(now,top,1,a[i+1][j]);//左下连正方形
add(now,xia+1,1,a[i+1][j+1] );//右下没限制
}
```
每行中间的格子走左下或右下都有限制,并且是连接不同的正方形
```
else
{
add(now,top,1,a[i+1][j] );//去左下有限制
add(top,xia,1,0);//这个正方形已经连完了,可以向下一行的节点连边
add(now,++top,1,a[i+1][j+1] );//去右下有限制,新开正方形
}
```
by issue_is_fw @ 2020-08-19 09:31:15
@[清平乐](/user/224358)
你看看是不是这样,可能是我错了$(;´༎ຶД༎ຶ`)$
by issue_is_fw @ 2020-08-19 09:33:06