栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2329 Nearest number

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2329 Nearest number

#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <queue>using namespace std;const int N = 205, INF = 1<<29;struct p {     int x, y;     p(int a=0, int b=0)      {          x = a;          y = b;      } }f[N][N];int n, map[N][N];int dp[N][N];void solve() {     int u, v;     for(int i=0; i<=n+1; ++i)      {          for(int j=0; j<=n+1; ++j)dp[i][j] = INF;      }     for(int i=1; i<=n; i++)      {          for(int j=1; j<=n; ++j){    if(map[i][j])     {         dp[i][j] = 0;         f[i][j] = p(i,j);         continue;     }    u = i-1;    v = j;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )f[i][j] = p(-1,-1);     }    u = i;    v = j-1;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }}      }     for(int i=1; i<=n; ++i)      {          for(int j=n; j>0; --j){    if(map[i][j])         continue;    u = i-1;    v = j;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }    u = i;    v = j+1;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }}      }  //cout<<dp[1][1]<<"  ##  "<<endl;    for(int i=n; i>0; --i)      {          for(int j=1; j<=n; ++j){    if(map[i][j])     continue;    u = i+1;    v = j;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }    u = i;    v = j-1;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }}      }      //cout<<dp[1][1]<<"  ##  "<<endl;      for(int i=n; i>0; --i)      {          for(int j=n; j>0; --j){    if(map[i][j])         continue;    u = i+1;    v = j;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }    u = i;    v = j+1;    if(dp[i][j] > dp[u][v] + 1)     {         dp[i][j] = dp[u][v] + 1;         f[i][j]  = f[u][v];     }    else if(dp[i][j] == dp[u][v] + 1)     {         if((f[i][j].x != f[u][v].x) || (f[i][j].y != f[u][v].y) )         f[i][j] = p(-1,-1);     }}      }    //cout<<dp[1][1]<<"  ##  "<<endl;    for(int i=1; i<=n; i++)     {         for(int j=1; j<=n; ++j)          {   if(map[i][j]) continue;   if(f[i][j].x == -1 && f[i][j].y == -1)    continue;   else   {       u = f[i][j].x;       v = f[i][j].y;       map[i][j] = map[u][v];   }          }     }    for(int i=1; i<=n; ++i)     {         printf("%d",map[i][1]);         for(int j=2; j<=n; ++j)          printf(" %d",map[i][j]);         printf("n");     } }int main() {     while(scanf("%d", &n) != EOF)      {          for(int i=1; i<=n; i++){    for(int j=1; j<=n; j++)     scanf("%d", &map[i][j]);}          solve();      }     return 0; }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号