当前位置:首页 > 算法Flyod课程设计
int i=0; CString str; char* temp; BOOL bread = fp.ReadString(str); temp = str.GetBuffer(0); n=atoi(temp); counts=n*n; int *tp; tp=new int[counts+1]; m_nNUM=n; c=new int*[n+1]; for(i=1; i<=n; i++) c[i]= new int [n+1]; a=new int*[n+1]; for(i=1; i<=n; i++) a[i]= new int [n+1]; r=new int*[n+1]; for(i=1; i<=n; i++) r[i]= new int [n+1]; bread = fp.ReadString(str); i=0; while(bread) {temp = str.GetBuffer(0); tp[i++] = atoi(temp); bread = fp.ReadString(str); } fp.Close(); //将一维数组转化为二维数组放到数组c中 for(i = 0; i UpdateData(FALSE); } void CEx_exFloydDlg::Ex_floyd(int n,int **c,int **a,int **r) { int i,j,k; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) 8 {a[i][j]=c[i][j]; r[i][j]=0; } } for(i=1; i<=n; i++) for(j=1; j<=n; j++) {for(k=1; k<=n; k++) if(a[i][k]+a[k][j] int CEx_exFloydDlg::Ex_output(int **r,int i,int j) {int k; if(r[i][j]!=0) { k=r[i][j]; Ex_output(r,i,k); strRes.Format(\ m_strResult += strRes; Ex_output(r,k,j); } return 0; } void CEx_exFloydDlg::OnButtonSubmit() //执行floyd算法计算最优值和最优解 {// TODO: Add your control notification handler code here UpdateData(TRUE); //接受编辑框的数据 CString strData; Ex_floyd(n,c,a,r); if(m_intStart>n||m_intStart<1) { MessageBox(\您输入的起点有误,请重新输入\ } if(m_intEnd>n||m_intEnd<1) { MessageBox(\您输入的终点有误,请重新输入\ } strData.Format(\起点为:%d\ m_strResult += strData + \ strData.Format(\终点为:%d\ m_strResult += strData + \ strData.Format(\最优值shortest[%d][%d]=%d\\n\d,a[m_intStart][m_intEnd]); m_strResult += strData + \ strRes.Format(\最佳路(4)Ex_FloydDlg.h中的主要代码为: class CEx_exFloydDlg : public CDialog { // Construction public: CEx_exFloydDlg(CWnd* pParent = NULL); // standard constructor void Ex_floyd (int n,int **c,int **a,int **r); int Ex_output(int **r,int i,int j); // Dialog Data //{{AFX_DATA(CEx_exFloydDlg) enum { IDD = IDD_EX_EXFLOYD_DIALOG }; CString m_strFileInfo; int m_intEnd; int m_intStart; CString m_strResult; int m_nNUM; 9 径:%d->\ m_strResult += strRes; Ex_output(r,m_intStart,m_intEnd); strRes.Format(\ m_strResult += strRes; UpdateData(FALSE); //更新编辑框的数据 } protected: HICON m_hIcon; int n ; //图形中顶点的个数 int **a; //最优值矩阵 int **c;//顶点之间的距离矩阵 int **r;//路由矩阵 int counts; int *tp; CString strRes; // Generated message map functions //{{AFX_MSG(CEx_exFloydDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnButtonSel(); afx_msg void OnButtonSubmit(); 五.运行结果 先选择“选择文件按钮”,会弹出一个文件选择框,在其中选择一个文件后如1.txt,在单击确定。会在顶点个数只读编辑框中显示出你所选文件中的顶点个数。然后会弹出一个提示框,“您选择的是1.txt文档,请输入起点和终点”。分别在起点和终点编辑框中输入起点和终点,在点击提交。会出现如下运行界面: 10 11
共分享92篇相关文档