orthogonal list

#include <iostream>
#include <fstream>
#define Rownum 4
#define Colnum 4
int a[4][4]={{1,3,0,3},
{4,0,3,2},
{5,0,2,1},
{3,3,1,4}};
using namespace std;

typedef struct node
{
   int data; //the data on each node
   node*right;
    node*down;//define the direction vector 
    node*next;
   int col;
   int row;
}*crosslist;

crosslist p[5];
void initialization( )
{
      p[0]=new node;
 crosslist q=new node;
 p[0]->data=0;
 p[0]->row= Rownum;
 p[0]->col=Colnum;
 p[0]->next=p[0];
 p[0]->right= p[0];
 p[0]->down=p[0];
 q= p[0];
 for(int i=1;i<=4;i++)
 {       
  p[i]=new node;
  p[i]->col=0;
  p[i]->row=0;
  p[i]->data=0;
  p[i]->next=q->next;
  q->next=p[i];
  q=p[i];
  p[i]->right=p[i];
  p[i]->down=p[i];
}

}

void buildlist(crosslist pnew)//start the cross linklist
{   
     
     int m, n;
     m= pnew->col;
     n=pnew->row;
     crosslist p1=p[n];
     
     while (p1->right!=p[n]&&p1->right->col<m)
     
       { p1=p1->right;
       }
      pnew->right=p1->right;
      p1->right=pnew;
      
      
       crosslist p2=p[m];
      while(p2->down!=p[m]&&p2->down->row<n)
     {
      p2=p2->down;
      }
      pnew->down=p2->down;
      p2->down=pnew;
      
      }
void getval( )//insert value into the down and the right linklist
{     
      crosslist p0,q;
      

       
      int i,j;
     for(i=0;i<=3;i++)
      {for(j=0;j<=3;j++)
        {
           if(a[i][j]!=0)
        {   p0=new node;
            p0->row=i;
            p0->col=j;
            p0->data=a[i][j];
          
            p0->right=p0;
            p0->down=p0;
              buildlist(p0);
            }
        }
        }
}


void output()//print the value by collum
{   int i,m,n,k;
     crosslist p3;
     
  for(i=1;i<=4;i++)
  {  
   p3=p[i];
  while(p3->down!=p[i])
  {    m=p3->down->data;
       n=p3->down->row;
       k=p3->down->col;
    cout<<m<<","<<n<<","<<k<<endl;
    cout<<endl;
       p3=p3->down;
       }
}
}

int main()
{
    initialization( );
    getval();
     output();
     system("pause");
     return 0;
     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值