您的位置:首页 > 其它

Grandpa's Walk UVALive - 6038 -DFS

2017-07-25 19:47 260 查看
题目链接如下

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4049

对图进行深度遍历,数条数就好了




#include <iostream>
#include <cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int map[120][120];
int vis[120][120];
int ans;
int n,m;
struct node
{
int x;
int y;
} h[120000];
int hx;
int dx[4]= {0,0,-1,1};
int dy[4]= {1,-1,0,0};
void dfs(int x, int y)
{
vis[x][y]=1;
int flag=0;
for(int i=0; i<4; i++)
{
if(x+dx[i]>0 && y+dy[i]>0 && x+dx[i]<=n && y+dy[i]<=m && !vis[x+dx[i]][y+dy[i]] && map[x][y]>map[x+dx[i]][y+dy[i]])
{
flag=1;
dfs(x+dx[i], y+dy[i]);
}
}
if(!flag) ans++;
vis[x][y]=0;
}
int main ()
{
int t;
cin>>t;
int tt=1;
while(t--)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
cin>>n>>m;
ans=0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin>>map[i][j];
}
}
hx=0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(map[i][j]>=map[i-1][j] && map[i][j]>=map[i+1][j] && map[i][j]>=map[i][j-1] &&map[i][j]>=map[i][j+1])
{
h[hx].x=i;
h[hx].y=j;
hx++;
}
}
}
for(int i=0;i<hx;i++)
{
dfs(h[i].x, h[i].y);
}
printf("Case #%d: %d\n",tt++,ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: