当前位置:   article > 正文

leetcode上面难度hard题_leetcode上面的题,hard难度怎么样?

leetcode上面的题,hard难度怎么样?
  1. N-Queens N皇后问题,输出全部解
  • 判断函数
  1. bool isvalid(int row,int col,int N,vector<int> &record)//判断是否能够放置
  2. {
  3. for(int i=0;i<N;i++)
  4. {
  5. if(record[i] == col || abs(i-row) == abs(record[i]-col))
  6. return false;
  7. }
  8. return true;
  9. }
  • 输出函数
  1. void print(vector<vector<string>> &result,vector<int> &record,int N)//输出
  2. {
  3. ostringstream re;
  4. vector<string> temp;
  5. for(int i=0;i<N;i++)
  6. {
  7. for(int j=0;j<N;j++)
  8. {
  9. if(record[i] == j)
  10. re<<'Q';
  11. else
  12. re<<'.';
  13. }
  14. temp.push_back(re.str());
  15. re.str("");
  16. }
  17. result.push_back(temp);
  18. }
  • 非递归的主体函数实现
    1. vector<vector<string>> solveNQueens(int n) {
    2. vector<vector<string>> result;
    3. int row=0,col=0;
    4. vector<int> record(n,-10000);
    5. while(row<n)
    6. {
    7. while(col<n)
    8. {
    9. if(isvalid(row,col,n,record))
    10. {
    11. record[row] = col;
    12. col = 0;
    13. break;
    14. }
    15. else
    16. {
    17. col++;
    18. }
    19. }
    20. if(record[row] == -10000)//若这一行没有放置
    21. {
    22. if(row==0)//退到第一行,程序结束
    23. break;
    24. else
    25. {
    26. --row; //回退到上一行
    27. col=record[row] +1;//上一行往右移一列
    28. record[row] = -10000;//清除上一行的皇后
    29. continue;
    30. }
    31. }
    32. if(row == n-1)
    33. {
    34. print(result,record,n);
    35. col = record[row]+1;//往右移一列
    36. record[row] = -10000;//清除本行的皇后
    37. continue;
    38. }
    39. ++row;
    40. }
    41. return result;
    42. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/968790
推荐阅读
相关标签
  

闽ICP备14008679号