hdu 1045 Fire Net
2015-03-25 20:34
253 查看
由于数据量比较小,所以呢.............暴力搜索!
把除去x的每个点都作为搜索的起始点,进去搜索。
搜索过程中,一个一个的去找没有被标记过且不为x的点,然后把这个点和前面所有的点进行比较判断,再dfs下去...........
看到学长只有50行的代码再次感觉自己弱爆了
把除去x的每个点都作为搜索的起始点,进去搜索。
搜索过程中,一个一个的去找没有被标记过且不为x的点,然后把这个点和前面所有的点进行比较判断,再dfs下去...........
看到学长只有50行的代码再次感觉自己弱爆了
#include<iostream> using namespace std; char mapp[5][5]; int re,n; int testa(int x,int y,int z)//同行的2个点看有没有墙 { if(y>z) swap(y,z); int flag=1; for(int i=y+1;i<=z-1;i++) { if(mapp[x][i]=='X') { flag=0;break; } } return flag; } int testb(int x,int y,int z)//同列的两个点看有没有墙 { if(y>z) swap(y,z); int flag=1; for(int i=y+1;i<=z-1;i++) { if(mapp[i][x]=='X') { flag=0;break; } } return flag; } int jduge(int x,int y)//是否和前面所有的点有冲突 { int flag=1; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(mapp[i][j]==1) { if(i==x&&testa(i,j,y)) flag=0; if(j==y&&testb(y,i,x)) flag=0; } } } return flag; } void dfs(int x,int y,int t) { t++; mapp[x][y]=1; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(mapp[i][j]=='.'&&jduge(i,j)) dfs(i,j,t); } } mapp[x][y]='.'; re=max(t,re); } int main() { while(cin>>n&&n) { int x,y; re=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>mapp[i][j]; } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(mapp[i][j]=='.') dfs(i,j,0); } } cout<<re<<endl; } return 0; }
相关文章推荐
- hdu 1045 Fire Net
- 杭电hdu 1045 Fire Net dfs
- HDU 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- HDU1045 Fire Net
- HDU1045:Fire Net(DFS)
- Fire Net(hdu 1045)
- Hdu 1045 Fire Net
- [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 讲解之用 ]
- [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 讲解之用 ]
- HDU-1045-Fire Net
- HDU-1045 Fire Net
- HDU:1045 Fire Net
- hdu 1045 Fire Net-dfs
- [面试备] 暴搜 or 二分图的经典升级 : hdu 1045 Fire Net 示例 [ 二分图 ]
- hdu 1045 Fire Net
- HDU 1045 fire net【二分匹配或者DFS】
- hdu 1045 Fire Net-二分匹配