阿里4.10号笔试第二题

求各位大神看看这个dfs怎么通过0.。。。

#include
using namespace std;
int n, m, c, t;
int vis[50][50];
vectorv;
int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };
int dfs(int x, int y)
{
 if (x == n + 1)
 {
  /*for (int i = 1; i <= n; i++)
   for (int j = 1; j <= m; j++)
    cout << vis[i][j] << (j == m ? '\n' : ' ');*/
  return 1;
 }
 for (int i = 1; i <= c; i++)
 {
  if (v[i])
  {
   int flag = 0;
   for (int j = 0; j < 4; j++)
   {
    int xx = x + dir[j][0];
    int yy = y + dir[j][1];
    if (vis[xx][yy] == i)
    {
     flag = 1;
     break;
    }
   }
   if (flag)continue;
   vis[x][y] = i;
   v[i]--;
   int new_x = x;
   int new_y = y+1;
   if (new_y == m+1) new_x++, new_y = 1;
   int ans = dfs(new_x, new_y);
   vis[x][y] = 0;
   v[i]++;

   if (ans) return 1;
  }
 }
 return 0;
}
int main()
{
 //ifstream cin("input.txt");
 cin >> t;
 while (t--)
 {
  cin >> n >> m>> c;
  v.clear();
  memset(vis, 0, sizeof vis);
  v.push_back(0);
  for (int i = 1; i <= c; i++)
  {
   int tem;
   cin >> tem;
   v.push_back(tem);
  }
  cout << (dfs(1, 1) ? "YES" : "NO") << endl;
 }
}
#阿里笔试410号##阿里巴巴##笔试题目#
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务