FZU 1301 Matrix(深度优先搜索)
2016-03-08 20:54
344 查看
题目地址:http://acm.fzu.edu.cn/problem.php?pid=1301.
本题为深度优先搜索题目。。
题目难度,,个人觉得挺大。主要是递归这方面不好理解。
下面附上代码,大家仔细看看吧。
这是某位大神的代码,,本渣渣借鉴的,主要是因为不知道怎么实现那些数的来回交换。
本题为深度优先搜索题目。。
题目难度,,个人觉得挺大。主要是递归这方面不好理解。
下面附上代码,大家仔细看看吧。
#include <stdio.h> #include<cstring> #include<algorithm> using namespace std; #define maxn 0x3fffffff int minn; void fun(int matrix[7][7],int n,int row) { int maxx,sum,i,j; if(row==n)//执行了n次循环那么所有的数都换了一遍,默认找到最小值 { maxx=(int)-1E9; for(i=0; i<n; i++) { sum=0; for(j=0; j<n; j++)//更新最小值 sum+=matrix[j][i]; if(maxx <sum)maxx =sum; } if(maxx <minn )minn=maxx; return; } for(i=1; i<=n; i++)//经典递归,,,veryGOOD,,实现了所有数的的来回传导。。。 { maxx=matrix[row][n-1]; for(j=n-1; j>0; j--) { matrix [ row ] [ j ] = matrix [row ] [j-1]; } matrix [row][0] =maxx; fun(matrix ,n , row+1); } maxx=matrix [row] [n-1]; for(j=n-1; j>0; j--) { matrix [row] [j]=matrix [row] [j-1]; } matrix [row] [0] =maxx; fun(matrix,n,row+1); } int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==-1)break;//特判结束 int matrix[7][7]; int i,j; for(i=0; i<n; i++) { for(j=0; j<n; j++) { scanf("%d",&matrix[i][j]); } } if(n==1)//如果只有一行一列那么它就是最大值 { printf("%d\n",matrix[0][0]); continue; } minn=maxn;//把最小值设为较大的数,方便交换 fun(matrix,n,1); printf("%d\n",minn); } return 0; }
这是某位大神的代码,,本渣渣借鉴的,主要是因为不知道怎么实现那些数的来回交换。
相关文章推荐
- 深入理解Session
- 模仿一个投票,学习一下View的事件分发和拦截
- 整理:统计学习-2 感知机
- 软件测试(二) 第二次作业
- C语言:动态内存会被自动释放吗?杜绝“野指针”
- 数组求和
- Django模板
- PAT-Deduplication on a Linked List (25)
- jQuery获取复选框checkbox的值的正确方法
- POJ 2229 Sumsets
- 数据结构 第二章 线性表(1)顺序线性表的实现
- android I/O Performance 的一些查看方法
- 《GPU编程与CG语言之阳春白雪下里巴人》 读书笔记2
- 点击 UITextField 清除按钮,文本框中内容清除
- 第1周项目3—1~m的求解任务
- 曲面等值线
- iOS设计模式--原型模式
- 4.4.3 Android animation制作 跳动的心
- android editText 软键盘enter键图标的设置
- JavaScript